368 Stimmen

Entity-Framework-Migrationen zurücksetzen

Ich habe meine Migrationen verpfuscht, ich habe IgnoreChanges bei der ersten Migration, aber jetzt möchte ich alle meine Migrationen löschen und mit einer ersten Migration mit der gesamten Logik beginnen.

Wenn ich die Migrationen im Ordner lösche und versuche Add-Migration es wird keine vollständige Datei erzeugt (sie ist leer - weil ich seit meiner letzten, jetzt gelöschten Migration keine Änderungen vorgenommen habe).

Gibt es irgendwelche Migrationen deaktivieren Befehl, so dass ich erneut Enable-Migrations ?

509voto

Kind Contributor Punkte 16008

Das müssen Sie tun:

  1. Löschen Sie den Zustand: Löschen Sie den Migrationsordner in Ihrem Projekt; und

  2. Löschen Sie die __MigrationHistory in Ihrer Datenbank (möglicherweise unter Systemtabellen); dann

  3. Führen Sie den folgenden Befehl in der Paketmanager-Konsole aus:

    Enable-Migrations -EnableAutomaticMigrations -Force

    Verwendung mit oder ohne -EnableAutomaticMigrations

  4. Und schließlich können Sie laufen:

    Add-Migration Initial

193voto

Greg Gum Punkte 29158

Das Problem: Sie haben Ihre Migrationen verpfuscht und möchten sie zurücksetzen, ohne Ihre bestehenden Tabellen zu löschen.

Das Problem: Sie können Migrationen mit bestehenden Tabellen in der Datenbank nicht zurücksetzen, da EF die Tabellen von Grund auf neu erstellen will.

Was ist zu tun?

  1. Vorhandene Migrationen aus der Tabelle Migrations_History löschen.

  2. Löschen Sie vorhandene Migrationen aus dem Ordner "Migrationen".

  3. Führen Sie add-migration Reset aus. Dadurch wird eine Migration in Ihrem Migrationsordner erstellt, die die Erstellung der Tabellen beinhaltet (sie wird jedoch nicht ausgeführt, damit es nicht zu einem Fehler kommt).

  4. Sie müssen nun die erste Zeile in der MigrationHistory-Tabelle erstellen, damit EF einen Schnappschuss des aktuellen Zustands hat. EF wird dies tun, wenn Sie eine Migration anwenden. Allerdings können Sie die soeben durchgeführte Migration nicht anwenden, da die Tabellen bereits in Ihrer Datenbank existieren. Gehen Sie also in die Migration und kommentieren Sie den gesamten Code innerhalb der "Up"-Methode aus.

  5. Führen Sie nun update-database aus. Es wendet die Migration an (ohne die Datenbank tatsächlich zu ändern) und erstellt eine Snapshot-Zeile in MigrationHistory.

Sie haben nun Ihre Migrationen zurückgesetzt und können mit den normalen Migrationen fortfahren.

31voto

Liam Kernighan Punkte 1894

In Entity Framework Core.

  1. Entfernen Sie alle Dateien aus dem Migrationsordner.

  2. Eingabe in die Konsole

    dotnet ef database drop -f -v
    dotnet ef migrations add Initial
    dotnet ef database update
  3. (Oder für die Paketmanager-Konsole)

    Drop-Database -Force -Verbose
    Add-Migration Initial
    Update-Database

UPD: Tun Sie das nur, wenn Sie sich nicht um Ihre aktuellen persistierten Daten kümmern. Wenn Sie das tun, die Antwort von Greg Gum verwenden

30voto

Chris Voon Punkte 1926

Wie wäre es mit

Update-Database –TargetMigration: $InitialDatabase

in der Paketmanager-Konsole? Es sollte alle Updates auf den Anfangszustand zurücksetzen.

Referenz-Link: Code-First-Migrationen - Migration zu einer bestimmten Version (einschließlich Downgrade)

19voto

Rusty Nail Punkte 2685

Um dies zu beheben, müssen Sie:

  1. Löschen Sie alle *.cs-Dateien im Migrationsordner.

  2. Löschen Sie die Tabelle _MigrationHistory in der Datenbank

  3. Laufen lassen Enable-Migrations -EnableAutomaticMigrations -Force

  4. Laufen lassen Add-Migration Reset

Dann, in der public partial class Reset : DbMigration Klasse müssen Sie alle vorhandenen und aktuellen Tabellen kommentieren:

public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}

Wenn Sie diesen Teil verpassen, geht alles schief und Sie müssen von vorne anfangen!

  1. Jetzt laufen Update-Database -verbose

Wenn Sie die oben genannten Schritte richtig ausgeführt haben, sollte dies erfolgreich sein, und Sie können nun wie gewohnt weitermachen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X