2012-04-10 11 views
11

Ich habe gerade Entity Framework-Migrationen installiert, einer Klasse eine Eigenschaft hinzugefügt und EF Migrations einen Wirbel gegeben.Abrufen des Initial Entity Framework-Migrationsskripts

Meine Entwicklungsdatenbank wurde prompt aktualisiert. So weit, ist es gut.

Jetzt möchte ich ein Änderungsskript für diese initial Verwendung von Migrationen für die Produktionsdatenbank erstellen. Beachten Sie, dass es eine bereits vorhandene Datenbank gab, weil ich diese auf ein vorhandenes Projekt angewendet habe.

Die Migrationen ich habe, sind:

PM> Get-Migrations 
Retrieving migrations that have been applied to the target database. 
201204102238194_AutomaticMigration 
201203310233324_InitialCreate 
PM> 

ich dachte ich, das ein Delta-Skript bekommen konnte mit folgenden:

Update-Database -SourceMigration:201203310233324_InitialCreate -TargetMigration:201204102238194_AutomaticMigration -script 

jedoch, dass gibt mir den Fehler:

'201204102238194_AutomaticMigration' is not a valid migration. Explicit migrations must be used for both source and target when scripting the upgrade between them.

Um zu sehen, was passieren würde, habe ich die zwei Parameter umgekehrt (Rückwärtsmigration) und habe das Skript bekommen, das ich gemacht habe Ich erwarte nach dem Hinzufügen der -Force Flag (neue Spalten fallen gelassen).

Wie kann ich ein Skript für diese erste Migration erhalten?

+0

Wie haben Sie die anfängliche Migration erhalten? Ihre automatische Migration sollte ein Skript zum Erstellen der gesamten Datenbank enthalten, das nicht Ihren Vorstellungen entspricht. Die Ausführung eines solchen Skripts in vorhandenen Datenbanken führt zu vielen Fehlern. Können Sie stattdessen [diesen Ansatz] (http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database) versuchen? –

+0

@Ladislav: Ich brauche kein Skript für die gesamte Datenbank, da meine gesamte (initiale) Datenbank bereits in Produktion ist. Was ich nicht herausfinden kann, ist, wie ich von der ersten Datenbank, die bereits in Produktion ist, bevor ich Migrationen verwendet habe, zu meinem ersten Update gehe. Ich bin mir sicher, dass Migrations mein ursprüngliches DB-Schema dort irgendwo hat, weil die Umkehr der SourceMigration- und TargetMigration-Parameter zusammen mit * -force * ein Skript erzeugt, um meine neuen Spalten zu DROPEN. Ich kann es einfach nicht von der ursprünglichen Datenbank zur ersten neuen Iteration bringen (füge diese paar Spalten hinzu). –

Antwort

14

Der richtige Weg, EF-Migrationen mit einer vorhandenen Datenbank zu starten, besteht darin, mit dem Hinzufügen einer leeren Migration zu beginnen, die die Metadaten der aktuellen Datenbank enthält.

Ich denke, dass Sie auf ein Modell zurücksetzen müssen, das mit dem ursprünglichen Datenbankschema kompatibel ist. Führen Sie dann den folgenden Befehl aus:

add-migration InitialSchema -IgnoreChanges 

Das sollte Ihnen eine erste Migration geben, die nichts tut, aber die Metadaten des aktuellen Modells enthält. Sie können Migrationen natürlich später mit -IgnoreChanges hinzufügen, wenn Sie Ihr Codemodell erweitert haben, um mehr der bereits in der Datenbank vorhandenen Tabellen abzudecken.

Sobald Sie diesen ersten Migrationsschritt an Ort und Stelle haben, würde das Skripting funktionieren.

Generell würde ich keine automatischen Migrationen empfehlen, es sei denn, Sie möchten nur automatische Migrationen durchführen. Wenn Sie eine Kontrolle über die Änderungen an der Datenbank haben wollen (einschließlich der Skripterstellung), dann sind code-basierte Migrationen die richtige Wahl.