Wir verwenden Code-First-Migrationen mit EF5 unter (localdb) \ v11.0 (Vstudio 2012) und alles hat bisher gut funktioniert.
Allerdings - heute musste ich ein paar Indizes für ein paar Tabellen erstellen und stieß auf Probleme.
Zuerst habe ich das in PM gemacht:
%Vor%Ich habe den Code in der gerüsteten Migration folgendermaßen geändert:
%Vor%Ich habe die Datenbank aktualisiert und das Ergebnis war:
%Vor%Der idx wurde auf dem Tisch erstellt und alle waren glücklich.
Allerdings - als ich den nächsten Index erstellt habe, hatte ich Probleme. Ich habe eine leere Migrationsaufgabe als
erstellt %Vor%Entschuldige mein Französisch - aber WT *?
Es scheint keinen Weg zu geben. Ich kann zu dem Migrationsschritt zurückkehren, der der Hinzufügung des ersten idx vorangeht, füge die idx'es wieder hinzu und das gleiche passiert wieder.
Können Sie mir sagen, was ich hier vermisse? Was mache ich falsch?
Bearbeiten:
Ich dachte zuerst, dass mein Problem darin bestand, Raw-SQL gegen die Datenbank / localdb auszuführen, aber es scheint, dass alles, was ich jetzt mache, nach der ersten Add-Migration aufhört.
Ich habe der Datenbank gerade eine neue Tabelle hinzugefügt. Dies ist das std-out-Ergebnis von PM Console:
%Vor%Beachten Sie, wie ich eine neue, leere Migrationsaufgabe hinzufüge, die CreateTable-Methode verwende und diese erfolgreich in der Datenbank aktualisiert habe. Wenn ich jedoch einen neuen Migrationsschritt hinzufüge, beschwert es sich, dass die Aufgabe, die gerade an die Datenbank "übergeben" wurde, immer noch "ausstehend" ist - obwohl sowohl das migrationsgeschichtliche als auch das Datenbankobjekt aktualisiert wurden.
Dies löst zwar die OP-Frage nicht, aber ich hatte ein ähnliches Problem, als ich eine neue Datenbank entwickelte und versuchte, zwei Migrationen hinzuzufügen, bevor ich die Datenbank aktualisieren konnte.
Meine Lösung bestand darin, meine Anwendung so auszuführen, dass die ausstehende Migration die Datenbank aktualisieren konnte. Die Anwendung aktualisiert die Datenbank automatisch mit Hilfe einer MigrateDatabaseToLatestVersion
. Dies erreichen Sie, indem Sie auch Update-Database
von der Package Manager-Konsole eingeben.
Wenn eine Migration hinzugefügt wird und weitere Änderungen vorgenommen werden, die zu derselben Migration hinzugefügt werden sollen, müssen Sie sie auch nicht entfernen und erneut hinzufügen (was ich zuerst versucht habe). Sie können nur die vorhandene ausstehende Migration aktualisieren. Die Hilfe wird angezeigt, wenn Sie das Add-Migration-Tool über die Package Manager Console ausführen (Hervorhebung durch mich).
Der Designer-Code für diese Migrationsdatei enthält einen Snapshot Ihrer aktuellen Datei Code erstes Modell. Dieser Snapshot wird verwendet, um die Änderungen an Ihrem Modell zu berechnen wenn Sie die nächste Migration scaften. Wenn Sie weitere Änderungen an Ihrem vornehmen Modell, das Sie in diese Migration einbeziehen möchten, dann Sie können es neu aufbauen indem Sie 'Add-Migration [Timestamp] _MigrationName' erneut ausführen .
Mit anderen Worten, führen Sie das Add-Migration-Tool mit der gleichen ID wie die ausstehende Operation aus, und die neuen Änderungen werden mit der alten zusammengeführt. Wenn Sie bemerken, dass die Änderungen nicht zusammengeführt werden, können Sie das Flag -F
(wie in Add-Migration <Name> -Force
) verwenden, um die Migration als Anthony-Arnold-Notizen in den Kommentaren zu erzwingen.
Ein anderer möglicher Grund ist - wenn Sie verschiedene Projekte in der Lösung haben wie - UI und Core (Ihre Datenbankkonfiguration ist hier), dann stellen Sie sicher, dass während der Migration das Core-Projekt als Startup-Projekt eingestellt ist. Es hat mein Problem gelöst. Happy coding:)
Tags und Links entity-framework code-first-migrations indexing localdb