C# EntityFramework6.2不应自动获取我的自定义DbConfiguration
我希望在不更改DbContext定义的情况下,从单个集成测试启用SQL日志显式 我拥有:10多个项目,包含多个DBContext。10多个测试项目。许多其他集成测试也使用EF 我所尝试的:C# EntityFramework6.2不应自动获取我的自定义DbConfiguration,c#,entity-framework-6,C#,Entity Framework 6,我希望在不更改DbContext定义的情况下,从单个集成测试启用SQL日志显式 我拥有:10多个项目,包含多个DBContext。10多个测试项目。许多其他集成测试也使用EF 我所尝试的: internal class MyDbConfiguration : DbConfiguration { public MyDbConfiguration(StreamWriter sw) { var interceptor = new DatabaseLogFormatter
internal class MyDbConfiguration : DbConfiguration
{
public MyDbConfiguration(StreamWriter sw)
{
var interceptor = new DatabaseLogFormatter(s => { sw.WriteLine(s); });
AddInterceptor(interceptor );
}
}
在我的机器上运行的一个集成测试是通过运行以下代码启动的
var dbConfiguration = new MyDbConfiguration(fileStream);
DbConfiguration.SetConfiguration(dbConfiguration);
这个很好用。单一测试记录所有EF SQL
但是当我运行完整的测试套件(没有一个测试和SetConfiguration)时,EF会选择我的MyDbConfiguration(很晚),并抛出一个异常
System.InvalidOperationException:在发现“MyDbConfiguration”类型之前,实体框架使用了默认的DbConfiguration实例
我如何防止这种情况?我无法更改任何app.configs
我希望EF仅在配置MyDbConfiguration时才使用它。如果您不希望
实体框架
自动检测并获取自定义数据库配置
,您必须找到绕过自动检测规则的方法
默认情况下(无任何其他自定义配置),实体框架
()的DbConfigurationFinder
在声明DbContext
派生类的同一程序集中查找从DbConfiguration
派生的类型
因为您不能更改任何.config
文件,所以一种方法是在一个单独的程序集中声明DbConfiguration
派生类,而不是保存DbContext
由于您将其用于集成测试目的,因此可以将其放入该测试项目中