Могу ли я сгенерировать сценарий миграции сначала с кодом 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.