wake-up-neo.com

Zurücksetzen von Entity-Framework-Migrationen

Ich habe meine Migrationen durcheinander gebracht, ich habe IgnoreChanges bei der anfänglichen Migration verwendet, aber jetzt möchte ich alle Migrationen löschen und mit einer anfänglichen Migration mit der gesamten Logik beginnen.

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

Gibt es einen Disable-Migrations Befehl, damit ich Enable-Migrations erneut ausführen kann?

278
Todd

Du musst :

  1. Löschen Sie den Status: Löschen Sie den Migrationsordner in Ihrem Projekt. Und
  2. Löschen Sie die __MigrationHistory-Tabelle in Ihrer Datenbank (möglicherweise unter Systemtabellen). Dann
  3. Führen Sie den folgenden Befehl in der Package Manager Console aus:

    Enable-Migrations -EnableAutomaticMigrations -Force
    

    Verwendung mit oder ohne -EnableAutomaticMigrations

  4. Und zum Schluss kannst du laufen:

    Add-Migration Initial
    
416
Todd

Das Problem: Sie haben Ihre Migrationen zusammengesetzt 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 erstellen möchte.

Was ist zu tun:

  1. Löschen Sie vorhandene Migrationen aus der Tabelle "Migrations_History".

  2. Löschen Sie vorhandene Migrationen aus dem Migrationsordner.

  3. Führen Sie Add-Migration Reset aus. Dadurch wird im Migrationsordner eine Migration erstellt, die das Erstellen der Tabellen beinhaltet (wird jedoch nicht ausgeführt, sodass keine Fehler auftreten.) 

  4. Sie müssen jetzt die erste Zeile in der MigrationHistory-Tabelle erstellen, damit EF eine Momentaufnahme des aktuellen Status anzeigt. EF führt dies aus, wenn Sie eine Migration anwenden. Sie können die gerade 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 Methode "Up" aus.

  5. Führen Sie jetzt die Update-Datenbank aus. Es wendet die Migration an (ohne die Datenbank tatsächlich zu ändern) und erstellt eine Momentaufnahmezeile in MigrationHistory.

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

137
Greg Gum

Wie wäre es mit 

Update-Database –TargetMigration: $InitialDatabase

in der Paket-Manager-Konsole? Es sollte alle Aktualisierungen auf einen sehr frühen Stand zurücksetzen.

Referenzlink: Erste Migrationen des Codes - Migration auf eine bestimmte Version (einschließlich Downgrade)

26
Chris Voon

Um dies zu beheben, müssen Sie: 

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

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

  3. Enable-Migrations -EnableAutomaticMigrations -Force ausführen

  4. Add-Migration Reset ausführen

In der Klasse public partial class Reset : DbMigration müssen Sie dann alle vorhandenen und aktuellen Tabellen kommentieren:

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

Wenn Sie dieses Bit verpassen, wird alles fehlschlagen und Sie müssen erneut beginnen!

  1. Jetzt Update-Database -verbose ausführen

Dies sollte erfolgreich sein, wenn Sie die obigen Schritte richtig ausgeführt haben, und jetzt können Sie wie gewohnt fortfahren.

14
Rusty Nail

Versuchen Sie in EntityFramework 6:

Add-Migration Initial

um die ursprüngliche Migrationsdatei zu aktualisieren.

2
Asaf

Als Problem stellte sich heraus, dass ich den Migrationsordner manuell entfernt habe. Ich habe das getan, weil ich den Inhalt sichern wollte, also zog ich den Ordner einfach aus dem Projekt. Ich habe das Problem später behoben, indem ich es (nach dem Erstellen einer Sicherungskopie) wieder einlegte und dann den Migrationsordner entfernte, indem er im Solutions Explorer mit der rechten Maustaste darauf klickte und im Popup-Menü die Option Löschen auswählte.

2
user1738579

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

(In .NET Core 2.1 getestet)

Hier sind die Schritte:

  1. Löschen Sie die _efmigrationhistory-Tabelle.
  2. Suchen Sie nach Ihrer gesamten Lösung nach Dateien, die Snapshot im Namen enthalten, wie ApplicationDbContextSnapshot.cs und Löschen.
  3. Add-Migration InitialMigration ausführen

Bitte beachten Sie: Sie müssen ALLE Snapshot-Dateien löschen. Ich habe unzählige Stunden damit verbracht, die Datenbank zu löschen ... Dies führt zu einer leeren Migration, wenn Sie dies nicht tun.

In # 3 können Sie Ihrer Migration auch einen Namen geben, wie Sie möchten.

Hier einige zusätzliche Ressourcen: asp.net CORE Migrations generiert leer

Zurücksetzen von Entity Framework 7-Migrationen

2
Jose A

In Entity Framework Core.

  1. Entfernen Sie alle Dateien aus dem Migrationsordner.
  2. Geben Sie die Konsole ein

dotnet ef Datenbank-Drop -f -v

dotnet EF-Migrationen hinzufügen Initial

dotnet EF-Datenbank-Update

1
Liam Kernighan

In EF6

  1. Löschen Sie alle Ihre Dateien im Ordner 'migrations'. Nicht jedoch 'initial create' oder 'config'.
  2. Löschen Sie die Datenbank.
  3. Führen Sie nun Add-Migration Initial aus.
  4. Jetzt können Sie 'Update-Datenbank' und alles wird gut.
1
adudley

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

  1. Löschen Sie vorhandene Migrationen aus dem Migrationsordner.
  2. Führen Sie in der Package Manager Console Add-Migration ResetMigrations aus.
  3. Migrationsverlauf in der Up()-Methode bereinigen:
/// <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()
    {
    }
}
0
Olexander