Entity Framework Code Только ошибка: модель, поддерживающая контекст, изменилась с момента создания базы данных

Я создал POCO «Только код» для использования с существующей базой данных с использованием Entity Framework 4 и CTP4. Когда я запускаю запрос, я получаю ошибку

Модель, поддерживающая контекст «xyzContext», изменилась с момента создания базы данных. Либо вручную удалите / обновите базу данных, либо вызовите Database.SetInitializer с экземпляром IDatabaseInitializer. Например, страtagsя RecreateDatabaseIfModelChanges автоматически удалит и воссоздает базу данных и, возможно, запустит ее новыми данными.

Я не понимаю, почему это происходит или что я могу изменить. Я просто создал POCO, определил простой DbContext, сделал несколько настроек, а затем попытался запустить простой запрос. Поскольку я использую только «Code Only», я не знаю о каких-либо настройках конфигурации, которые необходимо выполнить. И я, конечно, не хочу воссоздавать или удалять базу данных, так как это существующая firebase database.

Спасибо за любые идеи.

Я нашел ответ в комментариях к этому сообщению в блоге Скотта Гатри.

http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx

Для тех, кто видит это исключение:

«Модель, поддерживающая контекст« Производство », изменилась с момента создания базы данных. Либо вручную удалите / обновите базу данных, либо вызовите Database.SetInitializer с экземпляром IDatabaseInitializer».

Вот что происходит и что с этим делать:

Когда модель сначала создается, мы запускаем DatabaseInitializer, чтобы делать такие вещи, как создание базы данных, если она отсутствует или добавить данные семени. По умолчанию DatabaseInitializer пытается сравнить схему базы данных, необходимую для использования модели, с хешем схемы, хранящейся в таблице EdmMetadata, созданной с помощью базы данных (когда Code First является тем, который создает базу данных). Существующие базы данных не будут иметь таблицу EdmMetadata и поэтому не будут иметь hash … и реализация сегодня будет бросать, если эта таблица отсутствует. Мы будем работать над изменением этого поведения, прежде чем мы отправим версию fial, так как это значение по умолчанию. До тех пор существующие базы данных обычно не нуждаются в инициализаторе базы данных, поэтому его можно отключить для вашего типа контекста, вызвав:

Database.SetInitializer(null); 

Это ошибка в CTP4 для использования EF с уже существующими базами данных.

Вы можете исправить это, позвонив:

 Database.SetInitializer(null); 

в методе Application_Start для Global.asax

Я прокомментировал это выше, и он работал в то время, когда я просто играл с EF5, чтобы познакомиться с его работой. Теперь я пишу «фактический» код, и я отошел от установки инициализатора базы данных для каждого контекста в коде из-за архитектуры, на которой я решил использовать MEF, чтобы создать экземпляр любого DbContext и внедрить все зависимости конфигурации в качестве составных частей.

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

           

Поэтому, установив disableDatabaseInitialization = “true” в разделе файла конфигурации для entityFramework, вы можете преодолеть описанную выше ошибку, и поскольку это не в коде, одним из преимуществ является возможность «более легко» использовать абстрактные сборщики / фабрики для создания контекста.

Все, что мне нужно было сделать, это отбросить таблицу __MigrationHistory .

Контекст:

Я получил эту ошибку, когда я изменил имя таблицы. После добавления annotations [Table("NewTableName")] к одной из моих моделей, Entity Framework сгенерировала таблицу __MigrationHistory .

У меня была та же проблема: повторное добавление миграции и обновление базы данных не сработало, и ни один из вышеперечисленных ответов не был прав. Затем меня поразило вдохновение – я использую несколько уровней (одна сеть, одна информация и один бизнес). Веб-слой никогда не выбрасывал это исключение – это был бизнес-уровень (который я установил как консольное приложение для тестирования и отладки). Оказывается, бизнес-уровень не использовал правильную строку подключения, чтобы получить db и сделать контекст. Поэтому я добавил строку подключения в конфигурацию приложения и альта, которая работает. Поместите это здесь для других, которые могут столкнуться с одной и той же проблемой.

  • Самый эффективный метод дерева привязки с использованием Entity Framework
  • Сравнение с регистром LINQ to Entities
  • Как добавить проверку на мои classы POCO (шаблон)
  • Использование свойств DateTime в Code-First Entity Framework и SQL Server
  • Код элемента Entity Framework Первый метод AddOrUpdate insert Дублирующие значения
  • Entity Framework 4 / POCO - С чего начать?
  • Объект нельзя удалить, поскольку он не найден в ObjectStateManager
  • Как установить значение по умолчанию для POCO в EF CF?
  • Что такое независимые ассоциации и ассоциации с иностранными ключами?
  • Entity Framework 4 выборочно ленивые свойства загрузки
  • Entity Framework создает множественное имя таблицы, но представление ожидает уникальное имя таблицы?
  • Давайте будем гением компьютера.