In meiner MVC-Anwendung habe ich Entity Framework 6 verwendet und eine Datenbank mit dem Code First Approach erstellt. Nach einer gewissen Zeit habe ich eine der Entitätsklassen aktualisiert, indem ich eine neue Spalte hinzugefügt und einige Spalten entfernt habe. Um diese Änderungen in der Datenbank widerzuspiegeln, habe ich die folgenden Schritte ausgeführt:
- Der Migrationsordner wurde im Projekt gelöscht.
- Die Tabelle __MigrationHistory in der Datenbank wurde gelöscht.
Führen Sie anschließend den folgenden Befehl in der Package Manager-Konsole aus:
Enable-Migrations -EnableAutomaticMigrations -ForceFügen Sie die folgenden Zeilen in die Konfigurationsdatei ein:
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;Ausführen:
Add-Migration Initial- Und schließlich: run:
Update-Datenbank -Verbose
Ich erhalte jedoch einen Fehler "In der Datenbank befindet sich bereits ein Objekt mit dem Namen 'xxx'."
Um dieses Problem zu beheben, kommentiere ich den Code in der Up-Methode in der ursprünglichen Datei, die nach dem fünften Schritt erstellt wurde. Dies verhindert den Fehler, aber in der Datenbank wird nichts geändert (die aktualisierten Entitätstabellen bleiben wie zuvor). Wo ist der Fehler? Vielen Dank im Voraus für Ihre Hilfe.
Hier ist die Up-Methode, die ich in der Datei migration.cs kommentiert habe:
%Vor%
Und das ist die Down-Methode in der Datei migration.cs:
Warum hast du die Schritte 1-4 gemacht? Da bist du falsch gelaufen. Wenn Sie eine zuvor generierte Datenbank hatten und nur Änderungen am Schema vornehmen, erstellen Sie einfach eine Migration und wenden Sie sie an. Indem Sie die Schritte 1 bis 4 ausführen, heben Sie effektiv das Wissen von Entity Framework über diese Datenbank auf und enden im Wesentlichen mit Code-First mit einer vorhandenen Datenbank. An diesem Punkt müssen Sie entweder Ihr Schema manuell ändern oder lassen Sie Entity Framework es ausblasen und neu beginnen.
Wenn Sie wieder in einen Zustand zurückkehren, in dem Sie Migrationen erneut anwenden können, waren Sie beim Erstellen einer Migration und dem Entleeren der Methode Up
auf dem richtigen Weg. Sie müssen dies jedoch für den vorherigen Zustand Ihrer Anwendung tun, d. H. Für denjenigen, der der aktuellen Datenbank entspricht. Andernfalls generiert Entity Framework Create-Tabellen, die Ihre Codeänderungen enthalten. Die folgenden Schritte sind also:
Up
update-database
Danach solltest du gut sein, wieder zu gehen. Wenn Sie das nächste Mal Code-Änderungen vornehmen, folgen Sie einfach den Schritten 5 & amp; 6.
Ich hatte genau dieses Problem. Scheint, dass es Befehle gibt, die in dieser Situation helfen, nämlich die Flags -IgnoreChanges und -Force.
Ich habe das Trimmen von einem Multi-dbContext zu einer einzelnen dbContext-App durchgeführt. Wie Sie erraten können, existierten die Tabellen bereits, aber der einzelne Kontext new nichts von den Tabellen, die im zweiten Kontext gepflegt wurden.
Es ist eigentlich ziemlich einfach (wenn auch 2 Tage der Suche nach der Antwort ohne Erfolg führte mich zu lesen auf der Kommandozeilen von EF Code First Migrations und der Paketmanager ...) So habe ich das gehandhabt.
Sie könnten den Migrationsordner und die _Migrations-Tabelle in SQL löschen. Dies würde dann dazu führen, dass Sie Folgendes benötigen: Aktivieren-Migrationen -Force
Aber Sie sollten in der Lage sein, von hier aus aufzugreifen, ohne drastische Maßnahmen zu ergreifen:
Jetzt sollten Sie wieder auf dem richtigen Weg sein, nur Add-Migration und Update-Datenbank ohne die zusätzlichen Flags zu verwenden.
Tags und Links asp.net-mvc sql-server entity-framework ef-code-first updatemodel