Получение первичной миграции структуры сущностей Script

Я только что установил Entity Framework Migrations, добавил свойство класса и дал EF Migrations вихрь.

Моя база данных разработки была быстро обновлена. Пока что так хорошо.

Теперь я хочу создать изменение script для этого первоначального использования Migrations для производственной базы данных. Обратите внимание, что существовала уже существующая база данных, потому что я применил ее к существующему проекту.

У меня есть следующие миграции:

PM> Get-Migrations
Retrieving migrations that have been applied to the target database.
201204102238194_AutomaticMigration
201203310233324_InitialCreate
PM> 

Я думал, что могу получить дельта script, используя следующее:

Update-Database -SourceMigration:201203310233324_InitialCreate -TargetMigration:201204102238194_AutomaticMigration  -script

Однако это дает мне ошибку:

'201204102238194_AutomaticMigration' не является допустимой миграцией. Явные миграции должны использоваться как для источника, так и для сценарии обновления между ними.

Чтобы увидеть, что произойдет, я изменил два параметра (обратная миграция) и получил script, я ожидал бы после добавления флага -force (новые столбцы были удалены).

Как я могу получить script для этой первой миграции?

Ответ 1

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

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

add-migration InitialSchema -IgnoreChanges

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

Как только у вас будет этот начальный шаг миграции, скрипт будет работать.

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