Ist Entity Framework Code First in der Produktion ein bisschen bedeutungslos / nutzlos und was ist eine gute EF-Strategie für die Produktion?

29

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?

Wilhil
quelle
Wollte dies für ein paar Tage fragen, war nicht sicher, ob es am besten hier oder auf Stack Overflow war ...
Wilhil

Antworten:

15

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.

Ladislav Mrnka
quelle
Hallo wieder! -Sie sind schnell auf EF Fragen! :) ... Ich weiß nicht, wo ich ohne dich wäre!
Wilhil
Nach ein paar Monaten ist mein Programm ziemlich fertig ... Ich markiere dies als Antwort, aber ich habe mich gefragt, ob sich etwas geändert hat / gibt es Ressourcen, die helfen können?
Wilhil
2
Erste öffentliche Vorschau von "Migrations" wurde veröffentlicht. blogs.msdn.com/b/adonet/archive/2011/07/27/…
Ladislav Mrnka
Danke, schau dir das jetzt an! Ich habe es geliebt, mit Code First zu entwickeln, aber ich bin so nervös / besorgt, dass ich mich später ändern muss!
Wilhil
Wie gehen Sie mit Fällen um, in denen StoredProcs oder Views direkt in der Datenbank für andere Zwecke erstellt werden, z. B. für Berichte, die von der Anwendung nicht verwendet werden? Wir müssten zuerst wissen, welche SPs von einer Schemaänderung im Code betroffen sind.
Softveda
5

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
Nächster Schritt: Sie sind gefeuert;) Datenbankaktualisierungen sollten nicht automatisch ohne vorherige Sicherung durchgeführt werden - und möglicherweise in Ausfallzeiten, nicht wenn EIN BENUTZER eine neuere Version ausführt. Ihr Ansatz ist perfekt - um größere Bereitstellungen mit Tonnen von Fehlern herunterzufahren.
TomTom
@TomTom: das kommt drauf an. Wir führen eine DB-Anwendung seit mehreren Jahren fehlerfrei aus, was genau dies bewirkt: Automatische Schemaänderungen für ein neues Release, die von der Anwendung durchgeführt werden, wenn eine zu alte Version erkannt wird. Backups werden ebenfalls täglich durchgeführt, und wir behalten alle Schemaänderungen abwärtskompatibel bei (nur das Hinzufügen von Feldern und Tabellen, niemals das Löschen von Feldern). Ich bin damit einverstanden, dass die von Ihnen genannten Maßnahmen wichtig sind, wenn die Änderungen nicht abwärtskompatibel sind und Sie nicht garantieren können, dass alle Clientanwendungen gleichzeitig aktualisiert werden (z. B. für große Unternehmensdatenbanken).
Doc Brown
Oben, wenn die Änderungen nicht trivial sind. Versuchen Sie, ein Feld in einer 2-TB-Tabelle zu ändern (und ja, damit beschäftige ich mich - und es ist nicht einmal ein Data Warehouse). Sie haben sich in ein Szenario versetzt, in dem Sie technische Schulden akkumulieren, weil Sie niemals Felder HINZUFÜGEN, niemals aufräumen können.
TomTom
2

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.

Kasper
quelle