webentwicklung-frage-antwort-db.com.de

EF-Migrationsobjekt ist bereits vorhanden

Ich arbeite an einem ASP.NET MVC-Projekt mit Entity Framework mit Code zuerst aus der Datenbank. Ich bekomme die Modelle für jede Tabelle in der Datenbank. Ich habe einige Änderungen an den Modellen vorgenommen, Migrationen aktiviert und wenn ich die Migration erstmalig erhalte, erhalte ich einen Fehler:

Es gibt bereits ein Objekt mit dem Namen 'TableName' in der Datenbank. "

Ich habe es mit update-database -force versucht, aber nicht geholfen. Die anfängliche Migration erstellt die bereits vorhandenen Tabellen!

Wie kann die anfängliche Migration die Änderungen auf die Modelle anwenden und nicht die Tabellen von Anfang an erstellen?

Und wie sollten Sie in diesem Fall Änderungen zwischen Datenbank und Modellen synchronisieren?

8
Arianit

versuchen Sie, das auszuführen 

Add-Migration InitialCreate –IgnoreChanges 

befehl in der Package Manager Console. Dadurch wird eine leere Migration mit dem aktuellen Modell als Momentaufnahme erstellt. und dann Ausführen 

Update-Database 

befehl in der Package Manager Console. Dadurch wird die InitialCreate-Migration auf die Datenbank angewendet. Da die eigentliche Migration keine Änderungen enthält, wird der Tabelle __MigrationsHistory einfach eine Zeile hinzugefügt, die darauf hinweist, dass diese Migration bereits angewendet wurde.

siehe this

dann ändern Sie Ihre Modelle und fügen Sie die Migration hinzu.

ein anderer Ansatz besteht darin, einfach den gesamten Code zu den Aufwärts- und Abwärtsmethoden zu kommentieren

18
Amr Alaa

Dieser Fehler tritt auf, wenn Sie frühere Migrationen gelöscht haben und Ihre neue Migration versucht, eine neue Tabelle zu erstellen, die bereits vorhanden ist. Stellen Sie die vorherige Migration wieder her und alles wird in Ordnung sein.

2

Am besten funktioniert es für mich die Idee, den gesamten Code der UP- und DOWN-Funktionen der Initialmigrationsdatei zu kommentieren und anschließend dotnet ef database update auszulösen

2
Danish Shaikh

Die Lösung von Amr Alaa funktioniert, aber die Datenbank wurde nicht auf das neueste Modell migriert.

So funktioniert es (mit automatischer Migration): 

  1. Migrationsordner löschen 
  2. Aktiviere Migrationen
  3. Setzen Sie diese beiden Eigenschaften in der neu erstellten Datei Configuration.cs auf true

    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
    
  4. Update-Datenbank -Force ausführen

Ihre Datenbank wird auf den neuesten Stand gebracht und ist bereit.

hoffe das hilft.

1
Chtiwi Malek