Могу ли я сгенерировать сценарий миграции сначала с кодом EF и ядром .net

88

Я создаю приложение MVC с .Net Core, и мне нужно сгенерировать сценарий миграции.

С EF6 я выполнил команду

update-database -script

но когда я пытаюсь сделать то же самое с .net Core, выдает следующее исключение:

Update-Database: не может быть найден параметр, соответствующий имени параметра 'script'

Вы знаете, есть ли аналог для EF Core?

Габриэль Кастильо Прада
источник

Ответы:

129

В соответствии с документацией EF вы можете использовать Script-Migrationкоманду.

Если вы хотите просто написать сценарий для всех миграций, вы можете просто вызвать его из консоли диспетчера пакетов вот так. Если вы хотите просто записать изменения из последней миграции, вы можете назвать это так:

Script-Migration -From <PreviousMigration> -To <LastMigration>

Обязательно ознакомьтесь с документацией, для команды есть еще несколько параметров.

Гаспер
источник
1
Инструмент миграции сценариев, похоже, не работает для перехода на более раннюю версию (когда миграция в более ранняя, чем миграция из). Есть идеи о том, как создать сценарий отмены?
Nullius
1
@Nullius, вы не хотите называть это или видеть это как "undoScript", вам просто нужно отменить свой код, а затем обновить Db и получить новейшие скрипты ...
Haithem KAROUI,
1
У нас есть сервер развертывания, который также управляет db-миграциями. Например: при откате развертывания база данных также должна быть переведена в предыдущее состояние. Шаг сборки, который управляет db-миграциями, требует сценария «вверх» и «вниз». Мы обнаружили, что перенос сценария также работает при указании более ранней миграции К, чем От миграции. Однако следует установить для параметра «К миграции» значение ДО миграции, которую вы действительно хотите выполнить. Кроме того, при попытке сгенерировать сценарий «вниз» для последней миграции следует использовать «ZZZZZZ» (или аналогичный) для параметра «От миграции».
Nullius
4
Что делать, если я пытаюсь создать сценарий для Первой миграции. Предыдущей
миграции
2
@tchelidze Чтобы создать сценарий начальной миграции, установите для параметра -From значение 0. например, Script-Migration -From 0
TallMcPaul
20

Вы можете использовать dotnet core cli для создания скрипта

dotnet ef migrations script 

Также вы можете поместить это в файл с помощью новой команды Power Shell out-file.

dotnet ef migrations script | out-file ./script.sql
Ахмар
источник
2
Хороший совет, или в CMD: dotnet ef migrations script> script.sql
Тор Аурстад
13
dotnet ef migrations script --help

Usage: dotnet ef migrations script [arguments] [options]

Arguments:
  <FROM>  The starting migration. Defaults to '0' (the initial database).
  <TO>    The ending migration. Defaults to the last migration.

Options:
  -o|--output <FILE>                     The file to write the result to.
  -i|--idempotent                        Generate a script that can be used on a database at any migration.
  -c|--context <DBCONTEXT>               The DbContext to use.
  -p|--project <PROJECT>                 The project to use.
  -s|--startup-project <PROJECT>         The startup project to use.
  --framework <FRAMEWORK>                The target framework.
  --configuration <CONFIGURATION>        The configuration to use.
  --runtime <RUNTIME_IDENTIFIER>         The runtime to use.
  --msbuildprojectextensionspath <PATH>  The MSBuild project extensions path. Defaults to "obj".
  --no-build                             Don't build the project. Only use this when the build is up-to-date.
  -h|--help                              Show help information
  -v|--verbose                           Show verbose output.
  --no-color                             Don't colorize output.
  --prefix-output                        Prefix output with level.

так что ты можешь попробовать

dotnet ef migrations script ver1 ver2
dotnet ef migrations script ver1 ver2 -o ./script.sql

Это работает в .Net Core 2.1

АтакующийМило
источник
11

Вы также можете создать сценарий для отката миграции, изменив параметры на Script-Migration. Например, если у вас есть две миграции, BadLatestMigration и GoodPreviousMigration, вы можете вернуться к GoodPreviousMigration, используя следующую команду

Script-Migration BadLatestMigration GoodPreviousMigration 

После этого не забудьте удалить-Migration, чтобы удалить плохую миграцию.

Remove-Migration

Это работает в .Net Core 2.2.0

Майк
источник
Искал откат и это решило за меня. работает в EF Core 3.0
Sehab
5

Это также генерирует только SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM
Вайбхав Гарг
источник
7
Это верно для EF5, я не думаю, что он будет работать на EF6 или ядре EF
Юваль Перельман