6

Ich habe ein Entity Framework 6 CF-Projekt, das bereits einige Migrationen implementiert hat.Migrationseinträge in Entity Framework zusammenführen

Das Modell ist jetzt stabil und es ist nicht erforderlich, den bereits vorhandenen Migrationsverlauf beizubehalten.

Gibt es eine Möglichkeit, das Modell zurückzusetzen und alle Migrationsbefehle in die anfängliche Migration zusammenzuführen?

Als Beispiel fügt die erste Migration eine Spalte hinzu, während die zweite Migration einen eindeutigen, nicht gruppierten Index hinzufügt. Ich möchte jetzt alle diese Änderungen direkt in OnModelCreating statt in separaten Migrationen sehen.

Antwort

5

Migrationen haben sowohl Up als auch Down. Sie können Ihre Anwendung immer neu skalieren, indem Sie die Migrationen abbauen und dann eine neue Migration hinzufügen. Der Prozess Down ändert nicht Ihr Modell, nur die Änderungen an der Datenbank. Verwenden Sie Update-Database -Target:migrationTargetName oder Update-Database -TargetMigration:migrationNumber.

Wenn Sie eine Migration wünschen, die mit keiner Datenbank beginnt und mit Ihrem aktuellen Modell endet, können Sie alle Migrationen mit abreißen. Es empfiehlt sich, die Datenbank abzureißen und dann Update-Database als Test auszuführen, um zu überprüfen, ob alle Datenbankänderungen synchron sind.

Denken Sie daran, wenn Sie Ihre Migrationen auf 0 abreißen und dann eine Add-Migration ausführen, sollten Sie sich das erzeugte Gerüst sehr genau ansehen, da es sich wahrscheinlich drastisch von den inkrementellen Änderungen unterscheidet.

+1

Da ich mit der Terminologie nicht vertraut bin, hier ist, was ich bisher verstehe. Wenn Sie die Datenbank auf die Migration "0" herunterstufen, werden alle Ups rückgängig gemacht, alle Downs ausgeführt und der DB auf Initialmigration zurückgesetzt. Wie 'Update-Database' mit dem aktuellen Datenbankmodell synchronisiert wird, bekomme ich nicht. Wird es automatisch ein einzelnes "Up" und "Down" erzeugen, so dass das resultierende Modell das ist, mit dem ich begonnen habe, bevor ich es abreiße? –

+0

Sobald Sie sich für Migration '0' entschieden haben, möchten Sie 'Add-Migration' ausführen, um eine neue Migration zu erstellen, die vom aktuellen Status ('0') und den Scaffolds zu Ihrem aktuellen Modell startet. Beim Ausführen von 'Update-Database' werden alle 'Up'-Anweisungen ausgeführt, was beim Testen bei vielen Migrationen nützlich ist. – Claies

+0

Es ist wahrscheinlich, dass ich meine Absicht nicht klar formulierte. Wir haben derzeit 'x' Anzahl der Migrationen und der konsolidierte Hash ist zum Beispiel' abc'. Ich möchte alle 'Down's verlieren und habe entweder nur ein 'Up' oder das Model selbst aktualisiert, so dass der Hash' abc' wird. Alle Datensätze von Migrationen über der ursprünglichen '0' sollten verworfen werden, als ob wir zum ersten Mal 'InitialMigration' auf dem neuen Modell mit dem Hash 'xyz' ausgeführt hätten. –