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

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

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

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

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

50
задан Masoud 22 August 2016 в 22:36
поделиться

1 ответ

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

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, а значит, не будет хеша… и сегодняшняя реализация выдаст ошибку, если эта таблица отсутствует. Мы будем работать над изменением этого поведения, прежде чем отправим официальную версию, поскольку она используется по умолчанию. До тех пор существующие базы данных, как правило, не нуждаются в инициализаторе базы данных, поэтому его можно отключить для вашего типа контекста, вызвав:

Database.SetInitializer<Production>(null);
77
ответ дан 7 November 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: