Das Modell, das den 'DataContext'-Kontext unterstützt, hat sich seit der Erstellung der Datenbank geändert

8

Ich versuche Code First mit Migrationen zu verwenden. Auch wenn es an meinem Modell keine aktuellen Änderungen gibt, erhalte ich eine Ausnahme. Wenn ich eine Migration hinzufüge, sind die oben und unten leer, aber ich bekomme einen Laufzeitfehler mit der Nachricht wie folgt:

  

Eine Ausnahme vom Typ 'System.InvalidOperationException' trat in   EntityFramework.dll wurde aber nicht im Benutzercode

behandelt      

Zusätzliche Informationen: Das Modell, das den Kontext 'MyDataContext' unterstützt   hat sich seit der Erstellung der Datenbank geändert. Erwägen Sie, Code zuerst zu verwenden   Migrationen, um die Datenbank zu aktualisieren ( Ссылка ?

Meine Architektur ist wie folgt:

  • DataAccess-Projekt, das den Kontext, den Fluidkonfigurationen und den Migrationscode enthält
  • Modellprojekt, das die Poco-Klassen enthält
  • Web-API- und MVC-Projekte, die jeweils die Verbindungszeichenfolge in ihren jeweiligen web.config-Dateien enthalten.

Zusätzlich habe ich folgenden Code:

DbInitializer

%Vor%

Ich habe mit AutomaticMigrationsEnabled = false begonnen; im Migrations-Konfigurationskonstruktor, da ich davon überzeugt war, dass dies mir mehr Kontrolle darüber geben würde, wann Migrationen angewendet wurden. Ich habe auch versucht, dies auf wahr zu setzen, aber mit dem gleichen Ergebnis.

Ich habe nach dem Empfang dieses Fehlers eine neue Migration hinzugefügt, und die Up-Methode war leer. Ich habe die Datenbank für diese neue Migration aktualisiert, und in der _migrationHistory-Tabelle wurde ein Datensatz erstellt, der Fehler wird jedoch weiterhin angezeigt, wenn ich versuche, die Anwendung auszuführen. Außerdem wurden die Seed-Daten nicht zur Datenbank hinzugefügt.

%Vor%

wo

%Vor%

Die Frage: Wenn Add-Migration keine Änderung im Modell sieht, warum bekomme ich diesen Fehler, wenn ich laufe? Warum wird der Seed-Code nicht getroffen? Wie behebe ich dies, oder wenn das nicht festgestellt werden kann, wie kann ich die Ursache genauer bestimmen?

    
Steve Wash 02.02.2015, 11:19
quelle

4 Antworten

5

Das hat für mich funktioniert.

Gehen Sie zu Package Manager Console und führen Sie - Update-Database -force

aus     
Kyle Johnson 18.08.2016, 23:17
quelle
15

Ich bin mir nicht sicher, ob Sie die Antwort auf Ihr Problem gefunden haben, aber diese andere Antwort, die ich hier gefunden habe, hat es tatsächlich für mich getan: Entity Framework-Modelländerungsfehler

Ich habe tatsächlich die Tabelle __MigrationHistory in SQL Server gelöscht, von der ich nicht wusste, dass sie automatisch erstellt wurde.

Der Artikel spricht auch über die Option, es nicht zu erzeugen, denke ich, indem ich diese Anweisung verwende: Database.SetInitializer<MyDbContext>(null); , aber ich habe sie nicht benutzt, also bin ich mir nicht sicher, ob es so funktioniert

    
Oscar 19.03.2015 15:09
quelle
0

Ich wette, Ihr Datenkontext verbindet die Verbindungszeichenfolge nicht. Überprüfen Sie, ob es nicht mit einer localdb (etwas wie (localdb)\v11.0 ) initialisiert ist und nicht damit arbeitet, wenn Sie denken, dass es auf etwas anderes gesetzt ist.

    
George Polevoy 11.02.2015 07:25
quelle
0

Mein Problem war ein Konflikt zwischen aktivierten automatischen Migrationen und dem Initialisierer MigrateDatabaseToLatestVersion, wie beschrieben hier .

    
Steve Greene 22.05.2017 14:55
quelle