Czy mogę wygenerować skrypt migracji z najpierw kodem EF i .NET core

88

Buduję aplikację MVC z .Net Core i muszę wygenerować skrypt migracji.

Z EF6 uruchomiłem polecenie

update-database -script

ale kiedy próbuję zrobić to samo z .net Core wyrzuca następny wyjątek:

Update-Database: nie można znaleźć parametru zgodnego z nazwą parametru „script”

Czy wiesz, czy istnieje odpowiednik dla EF Core?

Gabriel Castillo Prada
źródło

Odpowiedzi:

129

Zgodnie z dokumentacją EF możesz użyć Script-Migrationpolecenia.

Jeśli chcesz po prostu skryptować wszystkie migracje, możesz po prostu wywołać to z konsoli Menedżera pakietów w ten sposób. Jeśli chcesz po prostu skryptować zmiany z ostatniej migracji, możesz to nazwać w ten sposób:

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

Pamiętaj, aby sprawdzić dokumentację, jest jeszcze kilka opcji polecenia.

Knot
źródło
1
Wydaje się, że narzędzie do migracji skryptów nie działa w przypadku obniżenia wersji (gdy migracja do jest starsza niż migracja z). Jakieś pomysły, jak wygenerować skrypt „cofnij”?
Nullius
1
@Nullius, nie chcesz go nazywać, lub postrzegać go jako "cofnij skrypt", po prostu musisz cofnąć kod, a następnie zaktualizować Db i pobrać najnowsze skrypty ...
Haithem KAROUI
1
Mamy serwer wdrożeniowy, który również zarządza migracjami db. Na przykład: kiedy wdrożenie zostanie wycofane, również baza danych powinna zostać obniżona do poprzedniego stanu. Etap budowania, który zarządza migracjami db, wymaga skryptu „w górę” i „w dół”. Odkryliśmy, że migracja skryptów działa również w przypadku określenia starszej migracji do niż migracja From. Należy jednak ustawić migrację do wartości PRZED migracją, którą faktycznie chcesz przeprowadzić. Również przy próbie wygenerowania skryptu „w dół” dla ostatniej migracji należy użyć parametru „ZZZZZZ” (lub podobnego) dla parametru Od migracji.
Nullius
4
Co jeśli próbuję wygenerować skrypt do pierwszej migracji. Nie ma poprzedniej
migracji
2
@tchelidze Aby wykonać skrypt początkowej migracji, ustaw parametr
-From
20

Możesz użyć dotnet core cli do wygenerowania skryptu

dotnet ef migrations script 

Możesz również umieścić to w pliku za pomocą nowego out-filepolecenia powłoki zasilania .

dotnet ef migrations script | out-file ./script.sql
Ahmar
źródło
2
Dobra wskazówka lub w 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.

więc możesz spróbować

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

Działa to w .Net Core 2.1

AttackingMilo
źródło
11

Możesz również wygenerować skrypt, aby wycofać migrację, cofając parametry do migracji skryptu. Na przykład, jeśli masz dwie migracje, BadLatestMigration i GoodPreviousMigration, możesz powrócić do GoodPreviousMigration za pomocą następującego polecenia

Script-Migration BadLatestMigration GoodPreviousMigration 

Następnie pamiętaj o usunięciu migracji, aby usunąć złą migrację

Remove-Migration

Działa to w .Net Core 2.2.0

Mikrofon
źródło
Szukałem wycofania i to rozwiązało to dla mnie. działa w EF Core 3.0
Sehab
5

To również generuje tylko SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM
Vaibhav Garg
źródło
7
To prawda dla EF5, nie sądzę, żeby to działało na rdzeniu EF6 lub EF
Yuval Perelman