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 ?

10voto

Jose A Punkte 8659

In Anbetracht dessen, dass dies immer noch auftaucht, wenn wir nach EF in .NET Core suchen, werde ich meine Antwort hier posten (da es mich sehr gequält hat). Beachten Sie, dass es einige Feinheiten mit der EF 6 .NET-Version gibt (kein Anfangsbefehl, und Sie müssen "Snapshot"-Dateien löschen)

(Getestet in .NET Core 2.1)

Hier sind die Schritte:

  1. Löschen Sie die _efmigrationhistory Tisch.
  2. Suchen Sie in Ihrer gesamten Lösung nach Dateien, die Folgendes enthalten Schnappschuss in ihrem Namen, wie zum Beispiel ApplicationDbContextSnapshot.cs y löschen sie.
  3. Bauen Sie Ihre Lösung neu auf
  4. Laufen lassen Add-Migration InitialMigration

Bitte beachten: Sie müssen ALLE Snapshot-Dateien löschen . Ich habe unzählige Stunden damit verbracht, die Datenbank zu löschen... Dadurch wird eine leere Migration erzeugt, wenn Sie dies nicht tun.

Außerdem können Sie in Nr. 3 Ihre Migration benennen, wie Sie wollen.

Hier finden Sie einige zusätzliche Ressourcen: asp.net CORE Migrationen leer erzeugt

Entity Framework 7 Migrationen zurücksetzen

8voto

Cliff Cawley Punkte 99

Für EFCore 6/7:

Um alle Änderungen im Laufe der Zeit wieder in einer einzigen Datei zusammenzuführen, und wenden Sie es auf bestehende Datenbanken, während alle Daten (dh in der Produktion, und andere Devs) diese Schritte für mich gearbeitet:

  1. Löschen Sie bestehende Migrationen aus dem Migrations Ordner in Ihrem Projekt.

  2. Löschen Sie die Context-Snapshop-Dateien. D.h. ApplicationDbContextSnapshot.cs , DatabaseContextModelSnapshot.cs oder ähnlich.

  3. Bauen Sie Ihre Lösung neu auf

  4. ausführen. Add-Migration Initial . (Kann nach Belieben benannt werden anstelle von Initial ). Dadurch wird eine Migration in Ihrem Migrationsordner erstellt, die die Erstellung der Tabellen beinhaltet, aber noch nicht angewendet wird.

  5. Öffnen Sie die generierte Migrationsdatei und comment out all the code inside the "Up" method so dass es keine Änderungen an Ihren bestehenden Tabellen vornimmt. (So können wir die Datenbank im richtigen Format aktualisieren, ohne im nächsten Schritt Änderungen vorzunehmen)

  6. Fügen Sie vor dem kommentierten Code innerhalb der Funktion Up migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]"); um das Löschen/Trunkieren während der Migration durchzuführen

    public partial class Initial : Migration { public override void Up() { migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]"); / OTHER COMMENTED OUT CODE / }

    public override void Down()
    {
    }

    }

  7. ausführen. Update-Database . _Es wendet die Migration an und entfernt vorhandene Migrationsverfolgungseinträge (ohne das Datenbankschema zu ändern) und erstellt eine Snapshot-Zeile in __EFMigrationsHistory_

  8. Übermitteln Sie diesen Code und wenden Sie ihn auf Ihre Entwicklungs-, Staging- und Produktionsdatenbanken an, wie Sie es normalerweise tun würden _(Vergewissern Sie sich, dass der Code in der Funktion Up noch auskommentiert ist, es werden keine Änderungen übernommen, außer einem neuen Eintrag in __EFMigrationsHistory )_

  9. entfernen migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]"); und den gesamten Code aus Schritt 5 auskommentieren und an die Versionskontrolle zurücksenden. (Auf diese Weise können neue Entwickler die Datenbank von Grund auf neu erstellen. Wenn jemand vergessen hat, seine bestehende Datenbank zu aktualisieren, wird es einen Fehler geben und sich beschweren, dass die Tabellen bereits existieren, so dass sie einfach die Initial-Datei auskommentieren und anwenden können).

6voto

sshanzel Punkte 339

Löschen el Migrations Mappe, Clean puis Rebuild das Projekt. Das hat bei mir funktioniert. Vor dem Bereinigen und Wiederherstellen hieß es, dass die Migration bereits existiert, da sie im Cache-Speicher noch nicht gelöscht wurde.

3voto

Asaf Punkte 457

In EntityFramework 6 versuchen Sie es bitte:

Add-Migration Initial

um die ursprüngliche Migrationsdatei zu aktualisieren.

3voto

Diese Methode erfordert nicht das Löschen der __MigrationHistory Tabelle, so dass Sie die Datenbank bei der Bereitstellung nicht in die Hand nehmen müssen.

  1. Löschen Sie vorhandene Migrationen aus dem Ordner Migrationen.
  2. Führen Sie in der Paketmanager-Konsole Add-Migration ResetMigrations
  3. Saubere Migrationsgeschichte in der Up() Methode:

    /// <summary> /// Reset existing migrations by cleaning the MigrationHistory table /// and creating a new initial migration with the current model snapshot. /// </summary> public partial class ResetMigrations : DbMigration { public override void Up() { Sql("DELETE FROM [dbo].[MigrationHistory]"); }

    public override void Down()
    {
    }

    }

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