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 ?

2voto

John Deighan Punkte 3881

Mein Problem bestand darin, dass ich den Ordner "Migrations" manuell entfernt hatte. Das habe ich getan, weil ich den Inhalt sichern wollte, also habe ich den Ordner einfach aus dem Projekt gezogen. Später habe ich das Problem behoben, indem ich ihn wieder eingefügt habe (nachdem ich eine Sicherungskopie erstellt hatte) und dann den Ordner "Migrations" entfernt habe, indem ich im Solutions Explorer mit der rechten Maustaste darauf geklickt und im Popup-Menü "Löschen" gewählt habe.

1voto

adudley Punkte 874

In EF6

  1. Löschen Sie alle Dateien im Ordner 'migrations'... Aber nicht die 'initial create' oder 'config'.
  2. Löschen Sie die Datenbank.
  3. Jetzt laufen Add-Migration Initial .
  4. Jetzt können Sie die Datenbank aktualisieren, und alles wird gut sein.

1voto

Sum None Punkte 1804

Wenn Sie wissen, dass Ihre Datenbank und Ihr Code synchronisiert sind, und jetzt nur an etwas Einfachem wie Migrationen hängen bleiben, die versuchen, Aufgaben zu duplizieren, ist der einfachste Weg, Migrationen ohne Datenverlust neu zu beginnen:

  1. Löschen Sie den Ordner Migrations in VS.
  2. Erstellen Sie eine neue Migration (z.B. add-migration InitialCreate )
  3. Löschen Sie alle Zeilen außer der ersten aus der Datei __EFMigrationsHistory db und ändern Sie den Wert der ersten Zeile in Ihren ersten Migrationsnamen mit dem Datumscode (z. B. 20220510060015_InitialCreate )

Wenn Sie nicht wissen, welche ProductVersion für die Migrationstabelle, finden Sie in der Designer o Snaphot .cs Dateien in den neu erstellten Ordner Migrations.

Wenn Sie nun update-database sollte er ohne Fehler abgeschlossen werden (und keine Aufgaben ausführen). Dies könnte ein guter Weg sein, um ein möglichst sauberes SQL-Migrationsskript für eine anfängliche Produktionsumgebung zu erhalten, wenn Sie bei Ihren ersten Migrationen eine Reihe von Umbenennungen, Löschungen, Tabellen, Spalten usw. vornehmen würden.

Wenn Ihr Code und Ihre Datenbank nicht synchron sind, ist es wahrscheinlich am besten, die obigen Schritte 1 und 2 auszuführen, dann die Datenbank zu sichern, sie zu löschen und die Migrationen alles von Grund auf neu erstellen zu lassen und dann die Daten wiederherzustellen.

Microsoft: Verwalten von Migrationen - Zurücksetzen aller Migrationen

Um die oben genannten Schritte zu vermeiden, müssen Sie manchmal, wenn eine Migration auf halbem Weg scheitert, durch eine Migration gehen und jeden migrationBuilder-Block auskommentieren, der bereits abgeschlossen ist (in der Reihenfolge, in der sie erstellt wurden), insbesondere wenn dies aus dem Migrationsfehler nicht klar hervorgeht. Sie können sich also Ihre Datenbank ansehen und sehen, welche Tabellen, Spalten, FKs, Indizes usw. gelöscht, umbenannt, erstellt usw. wurden, und dann einfach die Liste der migrationBuilder-Blöcke durchgehen und die Migration schrittweise durchführen (die abgeschlossenen Schritte auskommentieren, update-database erneut ausführen, wiederholen). Wenn Sie fertig sind, kommentieren Sie alles aus.

Ein weiterer häufiger Fehler kann auftreten, wenn bereits Daten in der Tabelle vorhanden sind und Sie versuchen, eine FK-Beschränkung hinzuzufügen:

Hinzufügen oder Aktualisieren einer untergeordneten Zeile nicht möglich: eine Fremdschlüssel-Beschränkung schlägt fehl ( Database1 . #sql-alter-d9b-445b CONSTRAINT FK_TableA_TableB_TableBId FOREIGN KEY ( TableBId ) REFERENZEN TableB (`TableBId)

Die Tabelle, für die Sie versuchen, eine FK-Beschränkung zu erstellen, stimmt in ihrer FK-Beschränkungsspalte mit nichts in der PK-Spalte der Primärtabelle überein. Am besten bereiten Sie sich darauf vor, indem Sie zuerst die PK-Tabelle mit einem Platzhalter für einen Standardwert erstellen, aber wenn Sie die Fehlermeldung bereits erhalten haben, sind wir hier. Der einfachste Weg, dies zu beheben, um einige der drastischeren Schritte oben zu vermeiden, ist,:

  1. Prüfen Sie, ob die FK-Spalte erstellt wurde und ob ihr ein Standardwert zugewiesen wurde (z. B. in TabelleA, FK-Beschränkung TabelleBId = "0").
  2. Ändern Sie die PK-Tabelle (oder erstellen Sie sie zuerst) mit einem Standard-PK-Id-Datensatz mit dem Wert, der in Schritt 1 zugewiesen wurde (z. B. erstellen Sie in TabelleB einen Datensatz mit TableBId = "0").
  3. Kommentieren Sie alles aus, bevor die migrationBuilder.AddForeignKey Block, bei dem ein Fehler aufgetreten ist, und führen Sie update-database wieder. Die Migration sollte nun die FK-Beschränkung erstellen und abgeschlossen werden.
  4. Alles auskommentieren.

0voto

greenCodeMonkey Punkte 11

In Net Core 3.0:

Ich habe keine Möglichkeit gefunden, die Migrationen zurücksetzen .

Ich hatte auch Probleme mit fehlerhaften Migrationen, und die hier gegebenen Antworten halfen mir nicht weiter. Ich habe eine .Net Core 3.0 Web-API, und irgendwann im letzten Monat habe ich die Datenbank direkt bearbeitet. Ja, ich habe etwas ganz Schlimmes getan.

Die hier vorgeschlagenen Strategien führten zu einer Reihe von Fehlern in der Paketmanager-Konsole:

  • Eine Migration mit diesem Namen existiert bereits
  • Der Schnappschuss konnte nicht gefunden werden
  • Force' ist kein anerkannter Parameter

Zugegeben, vielleicht habe ich einen Schritt übersehen oder nicht die richtigen Dateien gelöscht, aber ich habe herausgefunden, dass es Möglichkeiten gibt, dies ohne so viel rohe Gewalt zu bereinigen:

  • Remove-Migration aus der PMC für jede Migration nach Namen, in umgekehrter Reihenfolge der Erstellung, bis zur abgebrochenen Migration und einschließlich dieser
  • Add-Migration, um eine neue Migration zu erstellen, die das Delta zwischen der letzten guten Migration und dem aktuellen Schema darstellt

Wenn die Web-API nun mit einer leeren Datenbank gestartet wird, werden alle Tabellen und Eigenschaften korrekt erstellt, damit sie mit den Entitätsmodellen übereinstimmen.

HTH!

0voto

Diego Venâncio Punkte 4908

UPDATE 2020 => Entity-Framework-Migrationen zurücksetzen

Add-Migration Initial -Context ApplicationDbContext

ApplicationDbContext \=> Ihr Kontext.

Aber wenn Sie nur ein bestehendes Identitätsschema aktualisieren müssen, versuchen Sie es: https://stackoverflow.com/a/59966100/4654957

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