Подтвердить что ты не робот

MVC3 и First First Migrations - "модель, поддерживающая контекст" blah ", изменилась с момента создания базы данных"

Я начал свой проект, используя First Entity Framework Code First. Когда я был готов, я загрузил свою базу данных и код моему провайдеру. Все работало.

Мне нужно добавить новое поле в один из моих классов, и я не хочу потерять данные в базе данных. Таким образом, я пробовал читать некоторые сообщения в блоге об использовании First First Migrations. Я сделал следующее:

  • Я создал резервную копию моей удаленной (производственной) базы данных.
  • Я привязал эту базу данных локально
  • Я добавил свойство в свой класс
  • PM > Enable-Migrations
  • PM > Add-Migration AddSortOrderToCar
  • PM > Обновление базы данных
  • В этот момент я создал файл .bak локальной базы данных, а затем использовал этот файл для "восстановления" на удаленном.
  • Наконец, я опубликовал код на удаленном сайте.

Когда я посещаю сайт, я получаю следующее сообщение об ошибке: Модель, поддерживающая контекст "blahblah", изменилась с момента создания базы данных. Рассмотрите возможность использования First First Migrations для обновления базы данных.

Что я делаю неправильно?

4b9b3361

Ответ 1

Из моего опыта, свидетельствующего о том, что таблица миграции не синхронизирована (даже если ваши данные отсутствуют), и которая теперь является частью схемы db (начиная с 4.3, я думаю, - в системных таблицах).

Могут быть много причин и способов испытать эту ошибку, но большую часть времени...

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

Короче говоря, даже если Db-s - одна и та же таблица миграции, данные не могут быть - и сравнение хэшей может потерпеть неудачу (все же полное восстановление звучит как достаточно хорошее, но у вас есть "две стороны" ).


Что для меня работает, так это использовать Update-Database -Script

Это создает script с "разницей миграции",
которую вы можете вручную применить в качестве SQL script в базе данных целевого сервера (и вы должны получить правильные строки таблицы миграции, вставленные и т.д.).

Если это все еще не работает, вы все равно можете сделать две вещи...

  • Удалите таблицу миграции (target - под системными таблицами) - в соответствии с http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx там есть - это должно быть неудачно вернемся к предыдущему поведению, и если вы уверены, что ваши Db-ы те же самые - он просто собирается "доверять вам",

  • В качестве последнего средства, которое я использовал, сделайте Update-Database -Script полной схемы (например, инициализируя пустой db, который должен принудительно "full script" ),
    найти записи INSERT INTO [__MigrationHistory],
    просто запустите их, вставьте их в базу данных,
    и убедитесь, что ваши базы данных - и код соответствуют,

что должно заставить вещи работать синхронно снова.

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