Entity Framework - Neu starten - Alle Migrationen rückgängig machen / rückgängig machen


168

Aus irgendeinem Grund scheinen meine Migrationen durcheinander / beschädigt / was auch immer gewesen zu sein. Ich bin an dem Punkt angelangt, an dem ich nur noch einmal von vorne anfangen möchte. Gibt es also eine Möglichkeit, alle Migrationen vollständig rückgängig zu machen, den Verlauf zu löschen und den Migrationscode zu löschen, sodass ich wieder auf dem ersten Platz bin?

zB) PM> Disable-MigrationsoderRollback-Migrations

Ich möchte nicht auf einen ursprünglichen Migrationsschritt (dh so etwas wie ein InitialSchemaZiel) "aktualisieren", da ich ihn nicht mehr finden kann.

Antworten:


357

Sie können ein Rollback auf jede Migration durchführen, indem Sie Folgendes verwenden:

Update-Database -TargetMigration:"MigrationName"

Wenn Sie alle Migrationen rückgängig machen möchten, können Sie Folgendes verwenden:

Update-Database -TargetMigration:0

oder gleichwertig:

Update-Database -TargetMigration:$InitialDatabase 

In einigen Fällen können Sie auch die Datenbank und alle Migrationsklassen löschen.


6
Wie immer bist du der Beste.
Drzaus

2
Ich verstehe nicht, das OP sagt ausdrücklich "Ich möchte nicht auf einen ursprünglichen Migrationsschritt" aktualisieren "(dh so etwas wie ein InitialSchema-Ziel), weil ich es nicht mehr finden kann." Wie macht diese Antwort, was er will? Was ich erwartet hätte, war, dass ich mich in einem Zustand befinden würde, in dem ich es enable-migrationswieder tun muss. Diese sind natürlich hilfreich, aber erreichen sie das, was das OP verlangt? (Bitte antworten Sie nicht mit "Nun, er hat die Antwort akzeptiert." Ich versuche das zu verstehen, kein Klugscheißer zu sein.)
Michael Blackburn

@MichaelBlackburn: Wenn Sie enable-migrationserneut ausführen möchten und die Datenbank von Grund auf neu entwickeln, müssen Sie nur den letzten Satz befolgen: Löschen Sie die Datenbank und den gesamten migrationsbezogenen Code. Wenn Sie mit der Verwendung von Migrationen mit vorhandener Datenbank begonnen haben, müssen Sie zuerst alle Migrationen mit dem zweiten oder dritten Befehl zurücksetzen MigrationHistoryund dann die Tabelle und den gesamten migrationsbezogenen Code löschen . Es sollte Sie in die Ausgangsposition bringen. Sie können die Datenbank auch von der Sicherung aus starten (bevor Sie Migrationen verwenden) und den gesamten migrationsbezogenen Code löschen.
Ladislav Mrnka

4
@MichaelBlackburn: Was ich damit meinte, war, dass alle anderen Lösungen, die ich gesehen hatte, Ihnen sagten, Sie sollten auf Ihre erste benannte Migration zurück aktualisieren , aber mein Problem war, dass es keine anfängliche saubere Migration gab, auf die (zurück) aktualisiert werden musste - ich nur wollte alle Migrationen loswerden, unabhängig von der Methode. Daher ging diese Antwort auf meine Besorgnis mit-TargetMigration:0
drzaus


8

Um klar zu sein, wenn Sie LocalDb verwenden und von vorne beginnen möchten, löschen Sie einfach die Datenbank über den Datenbank-Explorer und geben Sie dann enable-migrations -forcedie Package Manager-Konsole ein. Löschen Sie die Datenbank nicht über den Ordner App_Data, da sonst das folgende Problem auftritt .


2
Seien Sie dabei vorsichtig, da Ihre Migrations \ Configuration.cs ohne Vorwarnung überschrieben werden!
Cgatian

Vielen Dank für die Warnung, ich habe den Code nach einer Weile so ziemlich auf den ersten Blick gelöscht. Es ist schön, den gesamten Code auf einmal zu haben, die Versionsverwaltung für Ihre Datenbank per se zu haben, aber ich habe keinen anderen großen Vorteil gesehen und zuerst zurück zur Datenbank gewechselt. Ich benutze Red Gate Sql Compare, um alle Deltas zu verfolgen.
Brian Ogden


0

Es ist falsch in ihrer Dokumentation geschrieben, denke ich, für mich habe ich verwendet

Update-Database -Target MigrationName
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.