Ich habe ein Code-First-Entity-Modell in EF5. Ich möchte die Datenbankänderungen jedoch manuell verwalten. Ich möchte nicht, dass EF meine vorhandene Datenbank und alle ihre Daten ändert. Wenn ich jedoch parallele Änderungen in der EF-Zuordnung und in der Datenbank vornehme, weigert sich EF, ordnungsgemäß zu funktionieren, und teilt mir mit, dass ich zuerst die Code-Migration verwenden muss. Wie schalte ich das aus?
entity-framework
migration
code-first
Stan Hargrove
quelle
quelle
Antworten:
Setzen Sie den Database.SetInitializer auf null.
quelle
__MigrationHistory
nicht über die neueste Migration verfügen und dies nicht möchten mach es trotzdem. In meinem Fall verwende ich Migrationen in einer Entwicklungsumgebung, aber wenn ich sie für die Produktion bereitstelle, verwende ich SSDT, um die Datenbank zu aktualisieren. Daher würde EF sich beschweren, dass sich das Modell geändert hat, weil__MigrationHistory
es nicht die neueste Migration hätte, aber ich kann garantieren, dass die Datenbank aktualisiert wird.Database.SetInitializer
vom Konstruktor zum Klassenkonstruktor zu verschieben. Dadurch wird sichergestellt, dass der Anruf nur einmal getätigt wird.Die vollständigste Antwort, die ich gefunden habe, lautet:
Migrations
Ordner in Ihrem Projekt.Database.SetInitializer<DatabaseContext>(null);
in Ihrem DatabaseContext-Initialisierer fest.__MigrationHistory
in Ihrer Datenbank. Bei EF6 + befindet sich die Tabelle unterTables
, bei früheren Versionen jedoch unterSystem Tables
.quelle
__MigrationHistory
jedem Start meiner Anwendung vorhanden ist, was die Startzeit meiner App um einige Millisekunden verlängert. Gibt es eine Möglichkeit, die__MigrationHistory
Prüfung vollständig zu deaktivieren ?Wenn Sie Migrationen vollständig deaktivieren möchten:
https://stackoverflow.com/a/9709407/141172
Ich fand es jedoch besser, die ersten Code-Migrationen aktiviert zu lassen, aber die
-Script
Option zu verwenden, damit EF ein DB-Änderungsskript für mich erstellt, das ich manuell auf jede Datenbank (Entwicklung, Qualitätssicherung, Produktion) anwenden kann:Auf diese Weise erstellt EF das Änderungsskript für mich und ich habe weiterhin die volle Kontrolle über die angewendeten Änderungen. Ich versioniere die Änderungsskripte wie jeden anderen Quellcode.
quelle
completely turn off migrations
. Um dies zu tun:Database.SetInitializer<YourContextType>(null)
Zum Start Ihrer Anwendung hinzufügenWenn Sie bereits Migrationen verwendet haben, hilft es nicht, nur den Initializer zu ändern. Sie müssen zu Management Studio gehen, Ihre Datenbanktabellen öffnen, zum
System Tables
Ordner gehen und die dort befindliche__MigrationHistory
Tabelle entfernen (für EF6 und höher befindet sie sich direkt darunterTables
). Dadurch werden Migrationen endgültig deaktiviert.quelle
System Tables
.sp_rename
. Ich habe auch den Initialisierer deaktiviert.Ich habe gerade dieses "Problem" von gelöst
Meine Umgebung ist
quelle
_MigrationHistory
? Wird automatisch eine neue Tabelle erstellt?