Generieren Sie ein vollständiges SQL-Skript aus EF 5 Code First Migrations

144

Wie verwende ich Entity Framework 5 Code First Migrations, um ein vollständiges Datenbankskript vom ursprünglichen (leeren) Status bis zur letzten Migration zu erstellen?

Der Blog-Beitrag im MSDN-Blog schlägt dies vor, scheint jedoch ein leeres Skript zu erstellen:

Update-Database -Script -SourceMigration: $InitialDatabase
Matt Wilson
quelle

Antworten:

285

Die API scheint sich geändert zu haben (oder zumindest funktioniert es bei mir nicht).

Das Ausführen der folgenden Schritte in der Package Manager-Konsole funktioniert wie erwartet:

Update-Database -Script -SourceMigration:0
Matt Wilson
quelle
13
Mir ist klar, dass dies die richtige Antwort ist, aber wie um alles in der Welt haben Sie festgestellt, dass 0 funktioniert, wenn der Parameter normalerweise eine Zeichenfolge ist?!
Dave R
26
Nur Versuch und Irrtum, nachdem ich alles versucht habe, was mir einfällt, um es zum Laufen zu bringen :)
Matt Wilson
1
Erstellt dies eine exakte Kopie der Datenbank? Einschließlich des Tabelleninhalts?
Multitut
2
@Multitut: Nein, es wird nur die Struktur tun.
Martin Clarke
6
Nur für den Fall, dass jemand in EfCore nach Möglichkeiten sucht und wie ich hier gelandet ist, lautet der Befehl : dotnet ef migrations script. Weitere Informationen
Rafael Miceli
13

Für alle, die den Entity Framework Core verwenden und hier landen. Das ist wie man es macht.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Mit dem Parameter -Fromund können Sie -Toein Aktualisierungsskript generieren, um eine Datenbank auf eine bestimmte Version zu aktualisieren.

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

Für diesen Befehl gibt es mehrere Optionen.

Die from- Migration sollte die letzte Migration sein, die auf die Datenbank angewendet wird, bevor das Skript ausgeführt wird. Wenn keine Migrationen angewendet wurden, geben Sie an 0(dies ist die Standardeinstellung).

Die zur Migration ist die letzte Migration , die nach dem Ausführen des Skripts auf die Datenbank angewandt werden. Dies ist standardmäßig die letzte Migration in Ihrem Projekt.

Optional kann ein idempotentes Skript generiert werden. Dieses Skript wendet Migrationen nur an, wenn sie noch nicht auf die Datenbank angewendet wurden. Dies ist nützlich, wenn Sie nicht genau wissen, wie die letzte Migration auf die Datenbank angewendet wurde, oder wenn Sie auf mehreren Datenbanken bereitstellen, die sich möglicherweise jeweils in einer anderen Migration befinden.

Justin Lessard
quelle
Dies funktioniert bis zu einem gewissen Punkt. Sobald Sie anfangen, Spaltennamen zu ändern, werden Fehler ausgegeben. Das Erstellen eines DacPac ist eine bessere Lösung. Besonders wenn Sie anfangen, Pipelines in CI / CD zu verwenden
Nick Turner
8

Um Matt Wilsons Antwort hinzuzufügen, hatte ich eine Reihe von Code-First-Entity-Klassen, aber keine Datenbank, da ich kein Backup erstellt hatte. Also habe ich bei meinem Entity Framework-Projekt Folgendes getan:

Öffnen Sie die Package Manager-Konsole in Visual Studio und geben Sie Folgendes ein:

Enable-Migrations

Add-Migration

Geben Sie Ihrer Migration einen Namen wie "Initial" und erstellen Sie die Migration. Geben Sie abschließend Folgendes ein:

Update-Database

Update-Database -Script -SourceMigration:0

Mit dem letzten Befehl werden Ihre Datenbanktabellen aus Ihren Entitätsklassen erstellt (vorausgesetzt, Ihre Entitätsklassen sind gut geformt).

Tahir Khalid
quelle