C# EF6和x27;DbConfigurationClass';已设置,但未发现此类型-多个DbContext和DbConfiguration
我有一个解决方案,其中有两个DBContext,我们正在从EF4迁移到EF6。旧的DbContext是代码优先的,我们主要是先使用新生成的db,但由于外部依赖性,这两者都需要运行 我的课程是这样的: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[...]
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对象,而不是无参数或字符串构造函数(无更改)
将配置信息放在配置文件中,多么新颖 根据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可能很难决定应该使用哪个上下文。我应该使用哪个配置部分,我应该在那里设置什么来修复它?