Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie mit Migrationen in Teamumgebungen arbeiten, können verschiedene Probleme auftreten, wenn Migrationen von mehreren Entwicklern gleichzeitig hinzugefügt werden. Beachten Sie, dass Migrationen nicht einfach SQL-Skripts sind, sondern auch eine Momentaufnahme des Modells zum Zeitpunkt dieser Migration enthalten.
Angenommen, Entwickler A und B erstellen gleichzeitig Arbeitsverzweigungen und generieren eine Migration in ihren Verzweigungen. Wenn Entwickler A seine Verzweigung zusammenführt und Entwickler B dasselbe ausführt, verfügt die neueste Migration (Entwickler B) über eine Kontextmomentaufnahme, die die Änderungen aus der Migration von Entwickler A nicht enthält. Dies kann zu verschiedenen Formen von Beschädigungen in späteren Migrationen führen.
Daher wird dringend empfohlen, im Voraus zu koordinieren und möglichst nicht gleichzeitig an Migrationen in mehreren Zweigen zu arbeiten.
Migrationen bilden eine sortierte Sequenz. Die Designermetadaten jeder Migration stellen das Modell an diesem Punkt in der Sequenz dar und werden verwendet, wenn die Migration entfernt wird. Lösen Sie parallele Migrationen nicht durch Sortieren oder Umbenennen ihrer Dateien auf: Die spätere Migration enthält weiterhin Metadaten, die die Änderungen der anderen Verzweigung nicht enthalten.
Erkennen von abgewichenen Migrationsbäumen
Hinweis
Dieses Feature wird ab Vorschau 3 in EF Core 11 eingeführt.
Ab EF 11 speichert die Modellmomentaufnahme nun die ID der neuesten Migration. Dies bedeutet: Wenn zwei Entwickler jeweils eine Migration in separaten Verzweigungen erstellen, führt das Zusammenführen dieser Verzweigungen zu einem Quellcodeverwaltungskonflikt in der Modellmomentaufnahmedatei , da beide Verzweigungen die neueste Migrations-ID ändern. Dieser Konflikt ist ein wichtiges Signal: Es teilt Ihnen mit, dass sich die Migrationsstrukturen voneinander unterscheiden, und eine davon muss verworfen werden, bevor Sie fortfahren.
Um dies zu beheben, führen Sie die unten aufgeführten Schritte zum Auflösen von unterschiedlichen Migrationsstrukturen aus: Beenden Sie den Vorgang der Zusammenführung, entfernen Sie Ihre Migration (lassen Sie die Modelländerungen bestehen), integrieren Sie die Änderungen Ihres Teamkollegen, und fügen Sie die Migration dann erneut hinzu.
EF Core 10 und früher notieren nicht die neueste Migrations-ID in der Modellmomentaufnahme, sodass ein Quellcodeverwaltungssystem die Momentaufnahme zusammenführen kann, ohne diesen Konflikt zu melden. Die Migrationsstrukturen sind weiterhin unterschiedlich und müssen mit demselben Workflow aufgelöst werden.
Auflösen abweichender Migrationsbäume
Wenn beim Zusammenführen einer Verzweigung ein abweichender Migrationsbaum erkannt wird, korrigieren Sie diesen, indem Sie Ihre Migration neu erstellen. führen Sie die folgenden Schritte aus:
- Beenden Sie den Seriendruck, und kehren Sie vor dem Zusammenführen zu Ihrem Arbeitsverzeichnis zurück.
- Entfernen Sie Ihre Migration, behalten Sie jedoch die Modelländerungen bei, die sie erstellt haben. Die Quellcodeverwaltung kann verwendet werden, um nur die generierten Migrationsdateien zu entfernen und die Momentaufnahme vor der Migration wiederherzustellen.
- Führen Sie die Änderungen Ihres Teamkollegen in Ihr Arbeitsverzeichnis zusammen.
- Fügen Sie Ihre Migration erneut hinzu, sodass sie auf der Momentaufnahme des zusammengeführten Modells basiert.
Danach basiert Ihre Migration direkt auf allen Migrationen, die in der anderen Verzweigung hinzugefügt wurden, und die Kontextmomentaufnahme enthält alle vorherigen Änderungen. Ihre Migration kann jetzt sicher für den Rest des Teams freigegeben werden.
Führen Sie die Ausführung dotnet ef migrations remove (oder Remove-Migration) nicht aus, nachdem parallele Migrationen bereits mit einer ungültigen Sequenz zusammengeführt wurden. Mit dem Befehl wird das Modell wiederhergestellt, das durch die Designermetadaten der vorherigen Migration dargestellt wird, die möglicherweise nicht die Änderungen der anderen Verzweigung enthalten. Verwenden Sie die Quellcodeverwaltung, um zu einem kohärenten Vorabzusammenführungszustand zurückzukehren, und führen Sie dann die vorstehenden Schritte aus.
Wiederherstellen von Migrationsänderungen in der Quellcodeverwaltung
Durch das Zurücksetzen eines Commits für die Quellcodeverwaltung ändert sich keine Datenbank. Wählen Sie vor dem Entfernen des Migrationscodes eine der folgenden Ansätze aus:
- Wenn die Migration nicht auf eine freigegebene Datenbank angewendet wurde, entfernen Sie die Migration, und stellen Sie dann die Modelländerungen wieder her.
- Wenn die Migration angewendet wurde, migrieren Sie die Datenbank zu einer früheren Migration, während der Migrationscode noch verfügbar ist, oder stellen Sie eine neue Korrekturmigration bereit. Halten Sie die Anwendungs- und Datenbankbereitstellung während des Rollbacks kompatibel.
Entfernen Sie keine Migrationsquelle, die noch in einer freigegebenen Datenbank aufgezeichnet wird. Wenn der Code bereits wiederhergestellt wurde, checken Sie den Commit aus, der die Migration enthält, um das Rollback zu generieren und zu testen, und übernehmen Sie dann eine kohärente Migrationssequenz.