Чи можу я сформувати сценарій міграції за допомогою коду EF спочатку та ядра .net


88

Я будую додаток MVC із .Net Core, і мені потрібно створити сценарій міграції.

З EF6 я справді запустив команду

update-database -script

але коли я намагаюся зробити те саме з .net Core, викидає наступний виняток:

Update-Database: Не вдається знайти параметр, який відповідає назві параметра 'script'

Чи знаєте ви, чи існує еквівалент для EF Core?

Відповіді:


129

Відповідно до документації EF ви можете використовувати Script-Migrationкоманду.

Якщо ви хочете просто створити сценарій усіх міграцій, ви можете просто викликати це з консолі Package Manager таким чином. Якщо ви хочете просто скриптувати зміни з останньої міграції, ви можете назвати це так:

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

Обов’язково перевірте документи, є ще кілька варіантів команди.


1
Здається, інструмент міграції сценаріїв не працює для зниження версії (коли міграція To старіша, ніж міграція From). Будь-які ідеї щодо того, як створити сценарій "скасувати"?
Нуллій

1
@Nullius, ти не хочеш називати його або бачити його як "undoScript", вам просто потрібно скасувати свій код, а потім оновити Db і отримати новітні сценарії ...
Haithem KAROUI

1
У нас є сервер розгортання, який також управляє db-міграціями. Наприклад: коли розгортання отримує відкат, також базу даних слід повернути до попереднього стану. Крок збірки, який управляє db-міграціями, потребує сценарію "вгору" і "вниз". Ми виявили, що скрипт-міграція також працює, коли вказується старіша міграція To, ніж міграція From. Однак слід встановити значення До міграції до того, ЩО ДО міграції, яку ви насправді хочете перенести. Крім того, намагаючись створити сценарій `` вниз '' для останньої міграції, слід використовувати `` ZZZZZZ '' (або подібний) для параметра `` Від міграції ''.
Нуллій

4
Що робити, якщо я намагаюся створити сценарій для першої міграції. Немає попередньої
міграції

2
@tchelidze Для сценарію початкової міграції встановіть для параметра -From значення 0. наприклад, Script-Migration -From 0
TallMcPaul

20

Ви можете використовувати dotnet core cli для створення сценарію

dotnet ef migrations script 

Також ви можете помістити це у файл за допомогою нової out-fileкоманди командної оболонки .

dotnet ef migrations script | out-file ./script.sql

2
Хороша порада, або в CMD: dotnet ef migrations script> script.sql
Tore Aurstad

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 

Після цього обов’язково видаліть міграцію, щоб видалити погану міграцію

Remove-Migration

Це працює в .Net Core 2.2.0


Я шукав відкат, і це вирішило це для мене. працює в EF Core 3.0
Сехаб,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.