EF6 'DbConfigurationClass' был установлен, но этот тип не был обнаружен - несколько DbContexts и DbConfigurations

У меня есть решение, в котором у нас есть два 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[...]
}

Точная ошибка, которую я получаю,

Был установлен экземпляр "NewConfiguration", но этот тип не был обнаружен в той же сборке, что и контекст "OldContext". Или поместите тип DbConfiguration в ту же сборку, что и DbContext введите DbConfigurationTypeAttribute в тип DbContext, чтобы укажите тип DbConfiguration или задайте тип DbConfiguration в файл конфигурации.

который пытается применить новую конфигурацию к старому контексту. Библиотека, в которой сидит сломанный код, является единственной библиотекой, которая ссылается как на старые, так и на новые EF DAL, и, кроме того, это исключение получает только тогда, когда тесты запускаются в командной строке через mstest - они проходят просто отлично, Visual Studio.

Использование .NET 4.0 и Visual Studio 2010.

Вещи, которые я пробовал:

  • размещение информации конфигурации в файлах конфигурации вместо кода (без изменений)
  • размещение одной DbConfiguration в общей библиотеке (сломалось ровно больше вещей)
  • с использованием конструктора DbContext, передающего объект DbConnection вместо конструктора без параметров или строки (без изменений)

Ответ 1

Самое простое решение, похоже, состояло в том, чтобы перейти к конфигурации на основе конфигурационного файла, в качестве подробного здесь.

Причина, по которой я не мог заставить это работать в первый раз, - это то, что у меня была другая версия EF, перечисленная в одном из различных файлов конфигурации, и не поймала ее.

Я попытался использовать один класс DbConfiguration в общей библиотеке и смог заставить его работать на этот раз (без реальной игры, я должен был сделать что-то ужасно неправильно в первый раз), но я думаю, что config- файловая конфигурация - лучшее решение.

Ввод информации о конфигурации в файл конфигурации, как новый!

Ответ 2

Я столкнулся с одной и той же проблемой... может быть, мы работаем в одной компании?

Интересная точка данных, которую я обнаружил, заключается в том, что провальный тест пройдет, когда запускается сам с командной строкой, как это:

mstest /testcontainer:C:\code\MyApp\bin\Debug\MyApp.Tests.dll /test:TestSomething