Ein Snapshot des Datenbankmodells wird zusammen mit jeder Migration in einer RESX-Datei gespeichert. Wenn Sie eine neue Migration hinzufügen, vergleicht EF das aktuelle Datenbankmodell (das aus Ihren Modellklassen und -einstellungen von Ihrem DbModelBuilder generiert wird) mit der letzten Migration und ermittelt eine Änderung zwischen ihnen.
Das Problem, das Sie beschreiben, kann auftreten, wenn Ihre Migrationen nicht synchron sind. Es passiert uns, wenn zwei Entwickler zwei unabhängige Migrationen durchführen und diese Migrationen später wieder in den Standardzweig zusammengeführt werden.
Beispiel:
Entwickler 1
Migration AddColumnA
Entwickler 2
Migration AddColumnB
Merged Version
Migration AddColumnA - Datenbank-Snapshot columnA
Migration AddColumnB enthält - Datenbank-Snapshot enthält columnB aber nicht columnA
Wenn Sie eine weitere Migration hinzufügen, werden die Änderungen ermittelt gegen Migration AddColumnB, das enthält keine Informationen über SpalteA. Eine Umgehungsmöglichkeit für dieses Problem besteht darin, eine Dummy-Migration (mit leeren Up- und Down-Methoden) zu generieren, damit bei der letzten Migration der korrekte Snapshot des Datenbankmodells angezeigt wird.
Merged Version
Migration AddColumnA - Datenbank-Snapshot enthält columnA
Migration AddColumnB - Datenbank-Snapshot enthält columnB aber nicht columnA
Migration Dummy - Datenbank-Snapshot mit columnA und columnB
Sehr interessant. Gibt es eine Möglichkeit zu verhindern, dass die Migrationen basierend auf dieser Ressourcendatei erstellt werden, sodass die Datenbank als Referenz verwendet wird? Dies ist meiner Meinung nach ein schwerwiegender Nachteil der Migrationen, da ich EXPLICIT-Migrationsdateien anstatt nur der automatischen Migration haben möchte, aber nicht mehrere Dummy-Migrationsdateien haben möchte, wenn ich mit mehreren Entwicklern in derselben Codebasis arbeite. –
IMHO gibt es keine Möglichkeit, Datenbank als Referenz anzugeben.Anstatt eine Dummy-Migration zu erstellen, können Sie auf die erste Migration (AddColumnA) aktualisieren und dann die zweite Migration neu generieren. Die Up- und Down-Methoden bleiben gleich, aber der Datenbank-Snapshot wird auf die korrekte Version aktualisiert und eine Dummy-Migration ist nicht erforderlich. –
Vielen Dank für alle Informationen, aber der Wechsel zwischen Revisionen für jede Zusammenführung ist viel mühseliger als "hässliche"/leere Merge-Migrationsdateien. Zumindest, wenn Sie jeden Tag eine oder mehrere Zusammenführungen machen. –