Myo Zaw Latt Ответов: 1

Как выполнить миграцию без потери каких-либо данных после удаления данных из таблицы __migrationhistory в EF6?


Я случайно удалил данные из таблицы __MigrationHistory и попытался сделать миграцию новых таблиц и изменений столбцов в БД. В это время EF6 показывает мне ошибку

- В базе данных уже есть объект с именем "xxxx"..
Я попробовал этот способ с помощью этой команды, и нет никакого эффекта на изменения столбцов таблицы.

Add-Migration MyMigration1 -IgnoreChanges
Update-database -Force

Есть много рекомендаций по этому поводу для воссоздания БД или чего-то еще. Но эти способы могут привести к потере данных в моей БД, которая содержит огромный размер тестируемых данных, и я не могу потерять никаких данных. Как решить эту ошибку, не теряя никаких данных. Если кто-нибудь захочет...

Что я уже пробовал:

Я попробовал этот способ с помощью этой команды, и нет никакого эффекта на изменения столбцов таблицы.

Add-Migration MyMigration1 -IgnoreChanges
Update-database -Force

1 Ответов

Рейтинг:
1

Richard Deeming

Бежать Update-Database -Script -SourceMigration:0 чтобы создать SQL-скрипт для вашей базы данных.

Затем вам нужно будет просмотреть сценарий, чтобы найти CREATE TABLE и INSERT заявления для _MigrationHistory таблица, и запустите только эти операторы против вашей базы данных. NB: Если вы только удалили данные, а _MigrationHistory таблица все еще существует, вам понадобится только INSERT заявления.

Если все ваши базы данных уже обновлены, вы также можете попробовать подход, описанный Риком Стралом:
Сброс сущность основы миграции с чистого листа - отчет Рик Штраль по [^]
Но обратите внимание на предупреждение:

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


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


Myo Zaw Latt

Спасибо Ричард,
Я попробую по твоему пути