c# – 使用Effort.EF6测试预加载方案
我们使用
Effort.EF6来构建针对内存数据库的ASP.NET Web API 2服务的测试套件,并且在大多数情况下它是一种美妙的体验.
但是,由于与此问题无关的原因,我们不得不关闭EF6中的延迟加载(通过运行Configuration.LazyLoadingEnabled = false; 我们的测试设置基本如下: >使用Effort的连接工厂创建数据库连接.每次测试时,这是一个唯一的连接实例(当我们尝试使用持久连接时使用唯一键). 问题是我们无法弄清楚如何配置Effort.EF6以禁止延迟加载,因为我们在测试设置中添加到上下文中的任何内容似乎已经在测试中的代码运行时加载,因此我们从不看例外.我们假设这是因为我们在测试设置和实际代码执行之间重用了上下文实例. 如果我们尝试将第三步切换到以下步骤: >在DI容器中为数据库连接注册服务覆盖. 我们最终得到一个空的db上下文,即尽管我们在运行测试之前添加了一些数据点,但它没有数据. 我们如何使用Effort构造和注入db上下文,如果缺少.Include()语句,它将失败但是如果它在那里会工作? 解决方法
您必须在Effort.EF6的构造函数中停用它 – 获取DbConnection对象的构造函数.
我解决了我的EF Code First项目,如下所示: public class MyDataContext : DbContext,IMyDataContext { /* * the ohter stuff like IDbSet<T> etc. */ public MyDataContext() : base("name=MyConnectionString") { Configure(); } /// <summary> /// This constructor is for test usage only! /// </summary> /// <param name="connection">Test connection for in memory database</param> public MyDataContext(DbConnection connection) : base(connection,true) { Configure(); } /// <summary> /// Configures the data context. /// </summary> private void Configure() { Configuration.LazyLoadingEnabled = false; } } 此外,在我的测试项目中,我正在设置测试CSV文件. Effort.EF6将使用这些文件来实例化具有种子数据的上下文.在我的例子中,我写了一个小的TestDataManager,它可以为特定的文件提供特定的表. 以下是一段代码,您可以使用Effort.EF6对数据进行种子设定: IDataLoader loader = new CsvDataLoader(@"C:TempTest_CSV_Files"); DbConnection dbConnection = DbConnectionFactory.CreateTransient(loader); var myDataContext = new MyDataContext(dbConnection); 也许这blog post也可以帮到你. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |