Таблица Entity framework, удаленная вручную, не может быть создана из миграции EF

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

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

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

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

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




Ответы (4)


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

person Kunal Furia    schedule 20.01.2017

Я наконец нашел решение. Это в основном изменение стратегии использования миграции. Добавление миграции проверяет только модели и, возможно, файлы cs временных меток предыдущей миграции. так что до тех пор, пока мы не предоставим команду update-database в nuget. Он никогда не узнает, какие таблицы были удалены вручную. Итак, что касается контекста, когда мы пытаемся выполнить некоторую миграцию, например, изменить таблицы. Это вызывает проблематичную миграцию, поскольку эта таблица не существует в базе данных, но миграция предполагает, что она уже существует. Так что для этого есть ручная работа. Вот шаги после того, как мы вручную удалили таблицу из базы данных.

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

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

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

person Joy    schedule 27.02.2014

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

dbo .__ EFMigrationsHistory

затем запустите команду update-database, наслаждайтесь

person m4ngl3r    schedule 18.05.2020
comment
лучшее решение как обычно не набрало очков .. в любом случае молодец! - person Boppity Bop; 04.10.2020
comment
Пиво для этого джентльмена - person Ashen One; 01.12.2020

ИМХО, самое простое решение - сгенерировать сценарий SQL из миграции и запустить только часть сценария, которая создает недостающие таблицы.

Update-Database -Source MigrationBeforeCreatingTables -Target MigrationAfterCreatingTables -Script
person Lukas Kabrt    schedule 02.02.2014
comment
Но я вручную удалил таблицы из базы данных. Не от модели. Модели остались прежними. Когда я пытаюсь создать таблицу migrationAftercreatingTables, таблицы не отображаются. следовательно, он не имеет никакого отношения к миграции. Создаются пустые методы ВВЕРХ и ВНИЗ. - person Joy; 04.02.2014
comment
Под MigrationAfterCreatingTables я имел в виду миграцию, в которой изначально создавались таблицы. В качестве альтернативы вы можете использовать команду Update-Database -Source 0 -Script, которая генерирует сценарии SQL для всех миграций. - person Lukas Kabrt; 04.02.2014