Генерация полного SQL-скрипта из EF 5 Code First Migrations

145

Как использовать Entity Framework 5 Code First Migrations для создания полного сценария базы данных от исходного (пустого) состояния до последней миграции?

Сообщение в блоге MSDN Blog предлагает сделать это, но похоже, что он создает пустой скрипт:

Update-Database -Script -SourceMigration: $InitialDatabase
Мэтт Уилсон
источник

Ответы:

287

Похоже, API изменился (или, по крайней мере, у меня не работает).

Запуск следующего в консоли диспетчера пакетов работает должным образом:

Update-Database -Script -SourceMigration:0
Мэтт Уилсон
источник
14
Я понимаю, что это правильный ответ, но как вы узнали, что 0 работает, когда параметр обычно является строкой ?!
Дейв Р
27
Только методом проб и ошибок, попробовав все, что я мог придумать, чтобы заставить его работать :)
Мэтт Уилсон,
1
Создает ли это точную копию базы данных? Включая содержимое таблицы?
Мультитут
2
@Multitut: нет, это только сделает структуру.
Мартин Кларк,
6
Только в случае , если кто - то ищет , как сделать это в EfCore и в конечном итоге здесь , как я, команда: dotnet ef migrations script. Подробнее о документации: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…
Рафаэль Мицели
14

Для тех, кто использует ядро платформы сущностей, попадающее сюда. Вот как ты это делаешь.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Вы можете использовать -Fromи -Toпараметр для создания сценария обновления для обновления базы данных для конкретной версии.

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

Есть несколько вариантов этой команды.

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

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

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

Джастин Лессард
источник
Это работает в точку. Как только вы начнете изменять имена столбцов, он начнет выдавать ошибки, поэтому создание DacPac является лучшим решением. Особенно, когда вы начинаете использовать конвейеры в CI / CD
Ник Тернер,
8

Чтобы добавить к ответу Мэтта Уилсона, у меня было несколько классов сущностей с кодом, но нет базы данных, так как я не делал резервную копию. Поэтому я сделал следующее в своем проекте Entity Framework:

Откройте консоль диспетчера пакетов в Visual Studio и введите следующее:

Enable-Migrations

Add-Migration

Дайте вашей миграции имя, такое как «Initial», а затем создайте миграцию. Наконец введите следующее:

Update-Database

Update-Database -Script -SourceMigration:0

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

Тахир Халид
источник