c# – 使用Effort.EF6测试预加载方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用Effort.EF6测试预加载方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2211字,纯文字阅读大概需要4分钟。
内容图文
![c# – 使用Effort.EF6测试预加载方案](/upload/InfoBanner/zyjiaocheng/768/23ce0a6ca67547b8b860c02689451311.jpg)
我们使用Effort.EF6来构建针对内存数据库的ASP.NET Web API 2服务的测试套件,并且在大多数情况下它是一种美妙的体验.
但是,由于与此问题无关的原因,我们不得不关闭EF6中的延迟加载(通过运行Configuration.LazyLoadingEnabled = false;
在db上下文的构造函数中),这意味着如果我们忘记.Include()某个关系并稍后使用它,我们就会得到NullReferenceExceptions.我们希望我们的测试可以捕获这些类型的错误.
我们的测试设置基本如下:
>使用Effort的连接工厂创建数据库连接.每次测试时,这是一个唯一的连接实例(当我们尝试使用持久连接时使用唯一键).
>使用该连接创建数据库上下文,并添加我们想要存在的数据以进行测试.
>在DI容器中为db上下文注册服务覆盖.
问题是我们无法弄清楚如何配置Effort.EF6以禁止延迟加载,因为我们在测试设置中添加到上下文中的任何内容似乎已经在测试中的代码运行时加载,因此我们从不看例外.我们假设这是因为我们在测试设置和实际代码执行之间重用了上下文实例.
如果我们尝试将第三步切换到以下步骤:
>在DI容器中为数据库连接注册服务覆盖.
> DI容器创建一个db上下文实例(将db连接作为注入依赖项)
我们最终得到一个空的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:\Temp\Test_CSV_Files");
DbConnection dbConnection = DbConnectionFactory.CreateTransient(loader);
var myDataContext = new MyDataContext(dbConnection);
也许这blog post也可以帮到你.
内容总结
以上是互联网集市为您收集整理的c# – 使用Effort.EF6测试预加载方案全部内容,希望文章能够帮你解决c# – 使用Effort.EF6测试预加载方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。