Структуры сущностей, удаленные вручную, могут быть сгенерированы из миграции EF

code-first-migrations entity-framework-4 entity-framework-5 entity-framework-6

Вопрос

Я создал миграцию и создал базу данных и таблицы. Например, таблицы

ABCDE . Теперь я снова изменил часть кода и update-database команду update-database . Все прошло гладко и красиво, и в таблицах были колонны. Теперь случайно я вручную удалил две таблицы D and E Теперь, когда я пытаюсь выполнить миграцию с помощью update-database . Он работает правильно, но не создает таблицы, которые я удалял вручную. Я попытался удалить существующую миграцию и повторно запустить update-database . Это дает ошибку, кроме двух таблиц. Там уже существует объект, существующий в имени «A, B, C» bla bla.

Любая идея, как избавиться от этой ситуации, не отбрасывая базу данных и воссоздавая удаленные таблицы с помощью миграции? Причина. Я не хочу удалять базу данных, поскольку она содержит данные в остальной части таблиц. Как действовать в этой ситуации, когда у меня есть существующие таблицы в базе данных, и случайно я вручную удалил несколько таблиц с SQL-сервера из SSMS.

Как снова воссоздать таблицы с помощью миграции?

О моей версии фреймворка сущности 6.0.2

Принятый ответ

Я наконец понял решение. В основном это изменение стратегии, как мы используем миграцию. Migration Add-migration проверяет только мосты и предыдущие файлы timestamp timestamp. так и до тех пор, пока мы не предоставим команду update-database в nuget. он никогда не узнает, какие таблицы были удалены вручную. Поэтому в контексте, когда мы пытаемся выполнить некоторую миграцию, например alter в таблицах. Это вызывает проблемную миграцию, поскольку эта таблица не существует в базе данных, но миграция предполагает, что она уже существует. Так что для этого есть ручная работа. Ниже приведены шаги после того, как мы удалили таблицу вручную из базы данных

  1. Проверьте модели, существующие в объектах, соответствующие таблице базы данных. Если мы обнаружили, есть какая-то аномалия в таблице базы данных, которая отсутствует в базе данных, но существует как сущность, которая означает. Они оба не синхронизированы друг с другом. Поэтому мы должны найти соотношение model => Table для каждого.

  2. Если мы создали начальную миграцию со всеми таблицами, тогда скопируйте удаленный код createTable из файла миграции.

  3. Вставьте его в последний недавно сгенерированный файл миграции. А затем сгенерируйте сценарий или запустите команду update-database command . Это создаст таблицу удаленной базы данных. Однако нет автоматической команды, которая будет синхронизировать между всеми объектами и таблицами базы данных. Это то, что мы должны отслеживать частично вручную в процессе миграции.


Популярные ответы

История миграции EF хранится в таблице _MigrationHistory. Удалите таблицу из базы данных. Внимание: это приведет к стиранию всей истории миграции, и вам придется воссоздать все таблицы



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему