设置了EF6'DbConfigurationClass',但未发现此类型 - 多个DbContexts和DbConfigurations

Zin*_*ind 15 .net c# entity-framework

我有一个解决方案,我们有两个DbContexts,我们正在从EF4转移到EF6.较旧的DbContext是代码优先的,我们主要使用较新的生成的db-first,但由于外部依赖性,需要在操作中使用它们.

我的课程看起来像这样:

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[...]
}
Run Code Online (Sandbox Code Playgroud)

我得到的确切错误是

设置了"NewConfiguration"的实例,但是在与"OldContext"上下文相同的程序集中未发现此类型.将DbConfiguration类型放在与DbContext类型相同的程序集中,在DbContext类型上使用DbConfigurationTypeAttribute指定DbConfiguration类型,或在配置文件中设置DbConfiguration类型.

这是尝试将新配置应用于旧上下文.打破代码所在的库是唯一引用旧的和新的EF DAL的库,而且只有在通过mstest在命令行上运行测试时才会抛出此异常 - 它们从内部通过了良好的运行视觉工作室.

使用.NET 4.0和Visual Studio 2010.

我尝试过的事情:

  • 将配置信息放入配置文件而不是代码(无更改)
  • 将单个DbConfiguration放入共享库(打破了更多的东西)
  • 使用DbContext构造函数传入DbConnection对象而不是无参数或字符串构造函数(无更改)

Zin*_*ind 4

最简单的解决方案似乎是转向基于配置文件的配置,详见此处.

我第一次无法使用它的原因是因为我在其中一个配置文件中列出了不同版本的EF并且没有捕获它.

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

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