Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EntityFramework6.2不应自动获取我的自定义DbConfiguration_C#_Entity Framework 6 - Fatal编程技术网

C# EntityFramework6.2不应自动获取我的自定义DbConfiguration

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

我希望在不更改DbContext定义的情况下,从单个集成测试启用SQL日志显式

我拥有:10多个项目,包含多个DBContext。10多个测试项目。许多其他集成测试也使用EF

我所尝试的:

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

由于您将其用于集成测试目的,因此可以将其放入该测试项目中