Ich habe eine lokale Instanz einer Datenbank, die ich kürzlich erstellt mit DbContext.Database.Create()
, so dass die __MigrationHistory
Tabelle mit einem InitalCreate
Eintrag, der den Code im Moment entspricht.Machen Sie EF4.3 Code First Migrationen ignorieren ausstehende Migrationen
Einige codebasierte Migrationen sind jedoch im Migrationsordner vorhanden. Diese werden in unseren Entwicklungs- und Staging-Umgebungen ausgeführt, um diese Datenbanken mit dem Code in Einklang zu bringen. Ich muss sie jedoch nicht lokal anwenden, da ich die Datenbank mit dem aktuellen Code erstellt habe.
Ich muss jetzt eine Änderung am Modell vornehmen und die entsprechende Migration erstellen. Aber wenn ich Add-Migration TestMigration
laufen lasse, erhalte ich folgende Fehler
Unable to generate an explicit migration because the following explicit
migrations are pending:
[201203271113060_AddTableX,
201203290856574_AlterColumnY]
Apply the pending explicit migrations before attempting to generate
a new explicit migration.
Was soll ich in diesem Fall tun? Ich kann das Add-Migration-Tool nicht auf eine andere Umgebung verweisen, da nicht garantiert ist, dass die Version mit meinen lokal übereinstimmt. Ich möchte eine Migration, die nur den Änderungen entspricht, die ich vorgenommen habe.
Es scheint, ich habe ein paar Optionen, aber keine sind ideal:
- die anderen Migrationen aus dem Migrations-Ordner zu löschen, das Add-Migration Befehl ausführen, um die Datenbank aktualisieren, dann die alten Migrationen wiederherzustellen. Das ist einfach, wirkt aber etwas hackisch.
- Kehren Sie zu der Version des Modells in der Quellcodeverwaltung zurück, auf die die erste Migration angewendet wurde, erstellen Sie diese dann und verwenden Sie sie zum Erstellen der Datenbank. Erhalten Sie dann die neueste Version, wenden Sie alle Migrationen an und ich bin bereit, meine Migration hinzuzufügen. Das scheint eine Menge Mühe zu sein!
- Erstellen Sie die Migration manuell.
Hat jemand irgendwelche Vorschläge, wie dies zu verwalten ist?
Dies funktioniert nicht, da frühere Migrationsoperationen nicht für eine Datenbank ausgeführt werden können, die mit 'DbContext.Database.Create()' erstellt wurde. Stellen Sie sich eine Migration vor, die eine Spalte hinzufügt, aber in Ihrer neuen lokalen Datenbank haben Sie diese Spalte bereits, so dass Sie eine 'SqlException' erhalten und die relevante Zeile niemals zur Tabelle' __MigrationHistory' hinzugefügt wird. Sehen Sie meine Antwort für das, was ich für richtig halte. –