Ich habe kürzlich mit Entity Framework 4.1 Code First programmiert und bin begeistert von der Entwicklung, aber mit nur einem End-Plan und einer sich schnell ändernden Feature-Liste ändere ich die Klasse / Datenbank ständig, um die Anforderungen der Anwendungen zu erfüllen.
In der Entwicklung gibt es keine Live-Daten, und ich kann einfach die gesamte Datenbank löschen, damit sie mit dem neuen Schema wiederhergestellt wird. Dies ist jedoch offensichtlich sehr schlecht, wenn sie live ist.
Die einzigen Lösungen, die ich sehen kann, sind entweder das Löschen der Metadatentabelle und das manuelle Synchronisieren der Datenbank oder das Löschen und erneute Einlesen.
Ich persönlich bevorzuge die erste Methode, da es meiner Meinung nach viel einfacher ist, eine Spalte / Tabelle hinzuzufügen, als Daten neu zu erstellen und zu migrieren. Wenn ich jedoch etwas verpasst habe, ist dies eine völlige Abkehr von Code First.
Die Frage ist also wirklich: Geht es bei Code First nur um die anfängliche Entwicklung und was ist eine gute Strategie zum Verwalten von EF für eine Produktionsumgebung?
quelle
Antworten:
Meiner Meinung nach dient die automatische Datenbankerstellung von code first nur der Entwicklung. Ich habe ähnliche Fragen zu Stack Overflow beantwortet, in denen ich sowohl das Aktualisieren der Datenbank als auch die Gründe für die schlechte automatische Funktionalität in der Produktion beschrieben habe:
Ein Upgrade der Datenbank ist eine halbmanuelle Aufgabe. Es sollte keine automatische, nicht getestete Magie dahinter stehen - darüber hinaus ist in EF 4.1 derzeit keine solche Magie verfügbar (es gibt nur eine Präsentation über die Funktionen, an denen das ADO.NET-Team arbeitet).
Sie können diese Frage auch überprüfen , um besser zu verstehen, wie Websites aktualisiert werden.
quelle
Upgrade-Skripte pflegen .
Pflegen Sie in der Datenbank selbst eine Tabelle, in der sich ein Datensatz mit der Version des Schemas befindet.
Beim Start der Anwendung wird die Version anhand der Version erkannt, die von den Binärdateien verwendet werden soll. Wenn dies nicht der Fall ist, werden die Upgrade-Skripts ausgeführt (oder der Benutzer dazu aufgefordert).
Vergessen Sie nicht, zuerst die Datenbank zu sichern.
quelle
Irgendwie ist die Frage dahingehend fehlerhaft, dass sie Verbindungen zwischen dem Programmiermodell und der Laufzeitumgebung herstellt, in der es keine gibt.
Code first ist in erster Linie ein Treiber für die Entwicklungsgeschwindigkeit und nicht wirklich mit dem Laufzeitsystem verbunden.
In der Produktion verfügen Sie ordnungsgemäß über eine Konfigurationseinstellung, die der Laufzeit die Möglichkeit zum Löschen / Aktualisieren des Datenbankmodells verweigert.
quelle