Ich versuche, die verschiedenen Arten von Migrationspfaden zu verstehen, die wir wählen können, wenn wir eine ASP.NET Core 1.0-Anwendung mit EF Core entwickeln. Als ich meine erste Core-Anwendung erstellte, bemerkte ich, dass sie eine ApplicationDbContextModelSnapshot-Klasse generierte, die einen ModelBuilder zum Erstellen des Modells verwendete.
Dann habe ich gelesen, dass ich, wenn ich der Datenbank eine Tabelle hinzufügen muss, das neue Modell erstellen und die Befehlszeile ausführen muss, um die Migrationsdatei zu generieren und die Datenbank zu aktualisieren. Ok, ich verstehe es bis zu diesem Punkt.
Aber wenn ich das mache, merke ich, dass die ApplicationDbContextModelSnapshot-Klasse auch aktualisiert wird.
1) Bedeutet das, dass ich diese ApplicationDbContextModelSnapshot-Klasse nicht ändern kann, da es aussieht, als ob sie jedes Mal neu generiert wird?
2) Soll ich Datenanmerkungen verwenden, um mein Modell zu erstellen, oder sollte ich die Fluent-API verwenden, die mir sagt, dass ich mein Modell in der Klasse ApplicationDbContext erstellen soll? Hä? eine andere Datei, die das Modell erstellt?
Ich sehe hier drei verschiedene Arten, mit der Datenbank zu arbeiten, die Snapshot-Klasse, Datenannotationen und die flüssige API. Ich bin verwirrt, weil ich heute in meiner letzten Migrationsdatei einen Fehler gemacht habe, also habe ich die Datei gelöscht, die Datenbank gelöscht und das Datenbank-Update erneut durchgeführt.
Aber dadurch habe ich Fehler ähnlich wie:
The index 'IX_Transaction_GiftCardId' is dependent on column 'GiftCardId'.
ALTER TABLE ALTER COLUMN GiftCardId failed because one or more objects access this column.
Natürlich habe ich mich gefragt, ob ich die ApplicationDbContextModelSnapshot-Klasse ändern musste.
Welchen Weg sollte ich bei Migrationen oder Datenbankaktualisierungen einschlagen, da diese drei Pfade mich verwirren?
Ich bin bereits auf dieses Problem gestoßen, wenn ich Migrationen erstelle, Modelländerungen vornehme, neue Migrationen erstelle und versuche, die Datenbank zu aktualisieren. Die Hauptursache ist, wenn Schlüssel geändert werden und Beziehungen nicht gelöscht und nicht wieder hinzugefügt werden oder nicht existieren.
Sie haben zwei Möglichkeiten
Einfache Methode Der einfachste Weg ist auch der destruktivste Weg und nur in einer Entwicklungsumgebung möglich.
Löschen Sie alle Migrationen, löschen Sie die Datenbank, erstellen Sie neue Migrationen und führen Sie 'update-database' aus.
Schwerste / sicherste Methode Dies ist die zeitaufwändigste Methode. Ich empfehle, dies zuerst in einem lokalen Integrationszweig zu tun, es dann auf eine Remote-Integration zu übertragen und dann zu produzieren.
Öffnen Sie die Migrationsdatei, dh 20160914173357_MyNewMigration.cs. Löschen Sie alle Indizes in der Reihenfolge Löschen / Hinzufügen / Bearbeiten von Tabellenschemata Fügen Sie alle Indizes zurück.
Stellen Sie für beide Methoden sicher, dass Sie sie erneut testen und erneut testen.