Ausgabe
- Entwicklung in meine Branche zusammengeführt
- Neue Migration hinzugefügt, die eine Spalte hinzufügt, Migration wird vor meiner Migration eingefügt
- Ausführen
update-database
und die Migration wird angewendet. Die Migration ist in der Tabelle _MigrationHistory sichtbar. Die Spalte ist jetzt vorhanden und die Modelländerung wird auf db angewendet. - EF weigert sich zu glauben, dass die Modelländerung angewendet wurde, und versucht weiterhin, dieselbe Migration neu zu generieren, wenn ich sie ausführe
add-migration
.
update-database generiert weiterhin diesen Fehler:
Die Datenbank kann nicht an das aktuelle Modell angepasst werden, da Änderungen ausstehen und die automatische Migration deaktiviert ist. Schreiben Sie entweder die ausstehenden Modelländerungen in eine codebasierte Migration oder aktivieren Sie die automatische Migration
Wie kann ich EF mitteilen, dass das Modell bereits auf db angewendet wurde? Ich kann nirgendwo finden, wie add-migration die Änderungen identifiziert, die in eine Migration eingefügt werden müssen.
Ich habe nirgendwo eine Snapshot-Datei, die verwendet werden kann. Ich habe versucht, frische, leere Datenbanken zu verwenden und alles aus der Entwicklung anzuwenden und dann alles aus meinem Zweig anzuwenden, immer der gleiche Fehler.
<TargetFramework>net6.0</TargetFramework>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.7">
BEARBEITEN
Ich habe versucht, meine Migrationen zu löschen, bevor ich sie mit der Entwicklung zusammenführe, aber selbst bei meinen Migrationen außerhalb des Bildes (frische Datenbank usw.) tritt das gleiche Problem auf.
Der Entwicklungszweig ist in Ordnung, der Entwicklungszweig weiß, dass die Migration angewendet wird, wenn update-database aufgerufen wird. Sobald die Entwicklung in meinen Zweig gemergt wird, kann es nicht erkennen, dass die Änderungen aus der neuen Migration angewendet werden: <
Lösung
Migrationen in Entity Framework müssen in einer strengen Reihenfolge durchgeführt werden. Das liegt daran, dass Datenbanken so funktionieren. Stellen Sie sich vor, Sie haben einen Satz von 3 Skripten, um Änderungen an der Datenbank vorzunehmen. Wenn Sie sie nicht in der richtigen Reihenfolge ausführen, können Sie am Ende einige sehr seltsame Ergebnisse oder Fehler erhalten. Um Ihren Code hier zu korrigieren, sollten Sie:
-
Setzen Sie Ihre lokale Codebasis auf einen Punkt zurück, bevor Migrationen stattgefunden haben, einschließlich der von Ihnen durchgeführten Migration. Sie müssen wahrscheinlich auch Ihre Datenbank auf die Migration zurücksetzen, bevor Sie mit der Anwendung Ihrer beginnen, etwa so:
dotnet ef database update <name-of-old-migration>
-
Ziehen Sie die Änderungen aus dem anderen Zweig mit neuen Migrationen ein.
-
Wenden Sie die eingehenden Migrationen an
dotnet ef database update
-
Wenden Sie Ihre lokalen Änderungen erneut an und fügen Sie eine neue Migration hinzu:
dotnet ef migrations add <name-of-new-migration>
-
Wenden Sie die neue Migration auf Ihre Datenbank an:
dotnet ef database update
Profi-Tipp : Holen Sie sich diese Migration so schnell wie möglich zu Ihrem zentralen Repository, bevor jemand anderes eine weitere Migration hinzufügt!
Beantwortet von – DavidG
Antwort geprüft von – Mildred Charles (FixError Admin)