Ich habe meine Migrationen durcheinander gebracht, die ich bei IgnoreChanges
der anfänglichen Migration verwendet habe, aber jetzt möchte ich alle meine Migrationen löschen und mit einer anfänglichen Migration mit der gesamten Logik beginnen.
Wenn ich die Migrationen im Ordner lösche und versuche Add-Migration
, keine vollständige Datei zu generieren (sie ist leer, da ich seit meiner letzten, aber jetzt gelöschten Migration keine Änderungen vorgenommen habe).
Gibt es einen Befehl zum Deaktivieren von Migrationen , damit ich ihn erneut ausführen kann Enable-Migrations
?
Antworten:
Du brauchst :
__MigrationHistory
Tabelle in Ihrer Datenbank (möglicherweise unter Systemtabellen). DannFühren Sie den folgenden Befehl in der Package Manager-Konsole aus:
Mit oder ohne verwenden
-EnableAutomaticMigrations
Und schließlich können Sie laufen:
quelle
Das Problem: Sie haben Ihre Migrationen durcheinander gebracht und möchten sie zurücksetzen, ohne Ihre vorhandenen Tabellen zu löschen.
Das Problem: Sie können Migrationen mit vorhandenen Tabellen in der Datenbank nicht zurücksetzen, da EF die Tabellen von Grund auf neu erstellen möchte.
Was ist zu tun:
Löschen Sie vorhandene Migrationen aus der Tabelle Migrations_History.
Löschen Sie vorhandene Migrationen aus dem Migrationsordner.
Führen Sie Add-Migration Reset aus. Dadurch wird eine Migration in Ihrem Migrationsordner erstellt, die das Erstellen der Tabellen umfasst (diese wird jedoch nicht ausgeführt, sodass keine Fehler auftreten.)
Sie müssen jetzt die erste Zeile in der MigrationHistory-Tabelle erstellen, damit EF eine Momentaufnahme des aktuellen Status hat. EF wird dies tun, wenn Sie eine Migration anwenden. Sie können die soeben durchgeführte Migration jedoch nicht anwenden, da die Tabellen bereits in Ihrer Datenbank vorhanden sind. Gehen Sie also in die Migration und kommentieren Sie den gesamten Code in der "Up" -Methode aus.
Führen Sie nun die Update-Datenbank aus. Es wird die Migration anwenden (ohne die Datenbank tatsächlich zu ändern) und eine Snapshot-Zeile in MigrationHistory erstellen.
Sie haben jetzt Ihre Migrationen zurückgesetzt und können mit normalen Migrationen fortfahren.
quelle
Wie wäre es mit
in der Package Manager-Konsole? Es sollte alle Aktualisierungen auf seinen sehr frühen Zustand zurücksetzen.
Referenzlink: Code First Migrations - Migration auf eine bestimmte Version (einschließlich Downgrade)
quelle
Um dies zu beheben, müssen Sie:
Löschen Sie alle * .cs-Dateien im Migrationsordner.
Löschen Sie die _MigrationHistory-Tabelle in der Datenbank
Lauf
Enable-Migrations -EnableAutomaticMigrations -Force
Lauf
Add-Migration Reset
Dann müssen Sie in der
public partial class Reset : DbMigration
Klasse alle vorhandenen und aktuellen Tabellen kommentieren:Wenn Sie dieses Bit verpassen, wird alles fehlschlagen und Sie müssen erneut beginnen!
Update-Database -verbose
Dies sollte erfolgreich sein, wenn Sie die obigen Schritte korrekt ausgeführt haben, und jetzt können Sie wie gewohnt weitermachen.
quelle
Da dies immer noch angezeigt wird, wenn wir in .NET Core nach EF suchen, werde ich meine Antwort hier veröffentlichen (da es mich sehr verfolgt hat). Beachten Sie, dass die EF 6 .NET-Version einige Feinheiten aufweist (kein anfänglicher Befehl, und Sie müssen "Snapshot" -Dateien löschen).
(Getestet in .NET Core 2.1)
Hier sind die Schritte:
_efmigrationhistory
Tabelle.ApplicationDbContextSnapshot.cs
, und löschen Sie sie.Add-Migration InitialMigration
Bitte beachten Sie: Sie müssen ALLE Snapshot-Dateien löschen . Ich habe unzählige Stunden damit verbracht, nur die Datenbank zu löschen ... Dies erzeugt eine leere Migration, wenn Sie dies nicht tun.
Außerdem können Sie in # 3 Ihre Migration einfach so benennen, wie Sie möchten.
Hier sind einige zusätzliche Ressourcen: asp.net CORE Migrationen werden leer generiert
Setzen Sie die Migrationen von Entity Framework 7 zurück
quelle
In EntityFramework 6 versuchen Sie bitte:
um die anfängliche Migrationsdatei zu aktualisieren.
quelle
Im Entity Framework Core.
quelle
Mein Problem stellte sich heraus, dass ich den Migrationsordner manuell entfernt habe. Ich habe das gemacht, weil ich den Inhalt sichern wollte, also habe ich den Ordner einfach aus dem Projekt gezogen. Ich habe das Problem später behoben, indem ich es wieder eingefügt habe (nachdem ich eine Sicherungskopie erstellt hatte), dann den Migrationsordner entfernt habe, indem ich im Projektmappen-Explorer mit der rechten Maustaste darauf geklickt und im Popup-Menü die Option Löschen ausgewählt habe.
quelle
In EF6
Add-Migration Initial
.quelle
Löschen Sie den
Migrations
Ordner undClean
dannRebuild
das Projekt. Das hat bei mir funktioniert. Vor dem Bereinigen und Wiederherstellen wurde angegeben, dass die Migration bereits vorhanden ist, da sie im zwischengespeicherten Speicher noch nicht gelöscht wurde.quelle
Bei dieser Methode muss die
__MigrationHistory
Tabelle nicht gelöscht werden, sodass Sie die Datenbank bei der Bereitstellung nicht in die Hand nehmen müssen.Add-Migration ResetMigrations
Up()
Methode:quelle
In Net Core 3.0:
Ich konnte keinen Weg finden, Migrationen zurückzusetzen .
Ich hatte auch Probleme mit unterbrochenen Migrationen, und die hier angegebenen Antworten funktionierten bei mir nicht. Ich habe eine .Net Core 3.0-Web-API und irgendwo im letzten Monat habe ich die Datenbank direkt bearbeitet. Ja, ich habe eine schlechte, schlechte Sache gemacht.
Die hier vorgeschlagenen Strategien führten zu einer Reihe von Fehlern in der Package Manager-Konsole:
Zugegeben, ich habe vielleicht einen Schritt verpasst oder die richtigen Dateien gelöscht, aber ich habe festgestellt, dass es Möglichkeiten gibt, dies ohne so viel rohe Gewalt zu bereinigen:
Wenn die Web-API jetzt mit einer leeren Datenbank gestartet wird, werden alle Tabellen und Eigenschaften korrekt erstellt, damit sie mit den Entitätsmodellen übereinstimmen.
HTH!
quelle
UPDATE 2020
ApplicationDbContext => Ihr Kontext.
quelle
quelle