Kann ich zuerst ein Skript für eine Migration mit EF-Code und .net-Kern generieren?

83

Ich erstelle eine MVC-Anwendung mit .Net Core und muss das Skript einer Migration generieren.

Mit EF6 habe ich den Befehl ausgeführt

update-database -script

Aber wenn ich versuche, dasselbe mit .net Core zu tun, wird die nächste Ausnahme ausgelöst:

Update-Datenbank: Es wurde kein Parameter gefunden, der dem Parameternamen 'script' entspricht.

Wissen Sie, ob es ein Äquivalent für EF Core gibt?

Gabriel Castillo Prada
quelle

Antworten:

123

Gemäß der EF-Dokumentation können Sie den Script-MigrationBefehl verwenden.

Wenn Sie nur alle Migrationen per Skript ausführen möchten, können Sie sie einfach über die Package Manager-Konsole aufrufen. Wenn Sie nur die Änderungen aus der letzten Migration per Skript ausführen möchten, können Sie dies folgendermaßen aufrufen:

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

Überprüfen Sie unbedingt die Dokumente. Der Befehl enthält noch einige weitere Optionen.

Gasper
quelle
1
Das Skriptmigrationstool scheint bei Downgrades nicht zu funktionieren (wenn die To-Migration älter als die From-Migration ist). Irgendwelche Ideen, wie man ein "Rückgängig" -Skript generiert?
Nullius
1
@Nullius Sie möchten es nicht aufrufen oder sehen, dass es ein "UndoScript" ist. Sie müssen nur Ihren Code rückgängig machen und dann Db aktualisieren und die neuesten Skripte erhalten ...
Haithem KAROUI
1
Wir haben einen Bereitstellungsserver, der auch Datenbankmigrationen verwaltet. Beispiel: Wenn eine Bereitstellung zurückgesetzt wird, sollte auch die Datenbank auf den vorherigen Status heruntergestuft werden. Der Erstellungsschritt, der die Datenbankmigrationen verwaltet, benötigt ein "Auf" - und "Ab" -Skript. Wir haben herausgefunden, dass die Skriptmigration auch funktioniert, wenn eine ältere To-Migration als die From-Migration angegeben wird. Sie sollten jedoch die To-Migration auf die VOR der Migration einstellen, die Sie tatsächlich migrieren möchten. Wenn Sie versuchen, ein "down" -Skript für die letzte Migration zu generieren, sollten Sie "ZZZZZZ" (oder ähnliches) für den From-Migrationsparameter verwenden.
Nullius
2
Was ist, wenn ich versuche, ein Skript für die erste Migration zu generieren? Es gibt keine PreviousMigration
tchelidze
2
@tchelidze Um die anfängliche Migration zu skripten, setzen Sie den Parameter -From auf 0. zB Script-Migration -From 0
TallMcPaul
19

Sie können dotnet core cli verwenden, um ein Skript zu generieren

dotnet ef migrations script 

Sie können dies auch mit dem neuen Power Shell- out-fileBefehl in eine Datei einfügen .

dotnet ef migrations script | out-file ./script.sql
Ahmar
quelle
1
Guter Tipp oder in CMD: dotnet ef Migrationsskript> script.sql
Tore Aurstad
11
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.

Sie können es also versuchen

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

Dies funktioniert in .Net Core 2.1

AttackingMilo
quelle
10

Sie können auch ein Skript zum Zurücksetzen einer Migration generieren, indem Sie die Parameter auf Skriptmigration umkehren. Wenn Sie beispielsweise zwei Migrationen haben, BadLatestMigration und GoodPreviousMigration, können Sie mit dem folgenden Befehl zu GoodPreviousMigration zurückkehren

Script-Migration BadLatestMigration GoodPreviousMigration 

Stellen Sie anschließend sicher, dass Sie die Migration entfernen, um die fehlerhafte Migration zu entfernen

Remove-Migration

Dies funktioniert in .Net Core 2.2.0

Mike
quelle
Ich habe nach dem Rollback gesucht und das hat es für mich gelöst. arbeitet in EF Core 3.0
Sehab
5

Dies generiert auch nur die SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM
Vaibhav Garg
quelle
6
Dies gilt für EF5, ich glaube nicht, dass es auf EF6 oder EF Core funktionieren würde
Yuval Perelman