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