Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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# EF6和x27;DbConfigurationClass';已设置,但未发现此类型-多个DbContext和DbConfiguration_C#_.net_Entity Framework - Fatal编程技术网

C# EF6和x27;DbConfigurationClass';已设置,但未发现此类型-多个DbContext和DbConfiguration

C# EF6和x27;DbConfigurationClass';已设置,但未发现此类型-多个DbContext和DbConfiguration,c#,.net,entity-framework,C#,.net,Entity Framework,我有一个解决方案,其中有两个DBContext,我们正在从EF4迁移到EF6。旧的DbContext是代码优先的,我们主要是先使用新生成的db,但由于外部依赖性,这两者都需要运行 我的课程是这样的: namespace Old.Busted.EF.DAL { [DbConfigurationType(typeof(Old.Busted.EF.DAL.OldConfiguration))] public class OldContext : DbContext[...]

我有一个解决方案,其中有两个DBContext,我们正在从EF4迁移到EF6。旧的DbContext是代码优先的,我们主要是先使用新生成的db,但由于外部依赖性,这两者都需要运行

我的课程是这样的:

namespace Old.Busted.EF.DAL
{
    [DbConfigurationType(typeof(Old.Busted.EF.DAL.OldConfiguration))]
    public class OldContext : DbContext[...]

    public class OldConfiguration : DbConfiguration[...]
}

namespace New.Shiny.EF.DAL
{
    [DbConfigurationType(typeof(New.Shiny.EF.DAL.NewConfiguration))]
    public class NewContext : DbContext[...]

    public class NewConfiguration : DbConfiguration[...]
}
public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        var providerInstance = SqlProviderServices.Instance;
        SqlProviderServices.TruncateDecimalsToScale = false;
        this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

[DbConfigurationType(typeof(DbContextConfiguration))]
public class DbContext1 : DbContext
{

}

[DbConfigurationType(typeof(DbContextConfiguration))]
public class DbContext2 : DbContext
{

}
我得到的确切错误是

已设置“NewConfiguration”的实例,但未设置此类型 在与“OldContext”上下文相同的程序集中发现。任何一个 将DbConfiguration类型与DbContext放在同一程序集中 类型,在DbContext类型上使用DbConfigurationTypeAttribute 指定DbConfiguration类型,或在中设置DbConfiguration类型 配置文件

正在尝试将新配置应用于旧上下文。包含中断代码的库是唯一一个引用旧EF DAL和新EF DAL的库,而且只有在通过mstest在命令行上运行测试时才会引发此异常-它们通过Visual Studio中的正常运行

使用.NET4.0和VisualStudio2010

我尝试过的事情:

  • 将配置信息放在配置文件而不是代码中(无更改)
  • 将单个数据库配置放入共享库(收支平衡 (更多东西)
  • 使用DbContext构造函数传入DbConnection对象,而不是无参数或字符串构造函数(无更改)

最简单的解决方案似乎是转向基于配置文件的配置,如详细所述

我第一次无法让它工作的原因是,我在一个不同的配置文件中列出了不同版本的EF,但没有捕获它

我确实尝试在一个公共库中使用一个DbConfiguration类,并且这次能够让它工作(没有真正的麻烦,我第一次肯定做了一些非常错误的事情),但是我认为基于配置文件的配置是更好的解决方案


将配置信息放在配置文件中,多么新颖

根据Microsoft的说法,您可以使用
DbConfiguration
解决两个DBContext,如下所示:

namespace Old.Busted.EF.DAL
{
    [DbConfigurationType(typeof(Old.Busted.EF.DAL.OldConfiguration))]
    public class OldContext : DbContext[...]

    public class OldConfiguration : DbConfiguration[...]
}

namespace New.Shiny.EF.DAL
{
    [DbConfigurationType(typeof(New.Shiny.EF.DAL.NewConfiguration))]
    public class NewContext : DbContext[...]

    public class NewConfiguration : DbConfiguration[...]
}
public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        var providerInstance = SqlProviderServices.Instance;
        SqlProviderServices.TruncateDecimalsToScale = false;
        this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

[DbConfigurationType(typeof(DbContextConfiguration))]
public class DbContext1 : DbContext
{

}

[DbConfigurationType(typeof(DbContextConfiguration))]
public class DbContext2 : DbContext
{

}
XML:

但是,我没有解决多个
DbConfiguration
。我的解决方案是为两个dbcontext共享相同的
DbConfiguration
,如下所示:

namespace Old.Busted.EF.DAL
{
    [DbConfigurationType(typeof(Old.Busted.EF.DAL.OldConfiguration))]
    public class OldContext : DbContext[...]

    public class OldConfiguration : DbConfiguration[...]
}

namespace New.Shiny.EF.DAL
{
    [DbConfigurationType(typeof(New.Shiny.EF.DAL.NewConfiguration))]
    public class NewContext : DbContext[...]

    public class NewConfiguration : DbConfiguration[...]
}
public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        var providerInstance = SqlProviderServices.Instance;
        SqlProviderServices.TruncateDecimalsToScale = false;
        this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

[DbConfigurationType(typeof(DbContextConfiguration))]
public class DbContext1 : DbContext
{

}

[DbConfigurationType(typeof(DbContextConfiguration))]
public class DbContext2 : DbContext
{

}

我也提到了这两个问题:但我认为我的问题是不同的。我还将注意到,它似乎通过UI和服务在“真实世界”中工作,并且注意到在Visual Studio中运行时测试通过,只有mstest运行失败。这是一个问题的主要原因,因为我们对构建使用TFS,并且希望所述构建通过我们的测试,但是当前正在运行的一个解决方案就是忽略所述测试(希望记住手动运行它们)。我也遇到了同样的问题。我认为这是因为我引用了一个具有另一个上下文的程序集,因此EntityFramework可能很难决定应该使用哪个上下文。我应该使用哪个配置部分,我应该在那里设置什么来修复它?