Code-first vs Model / Database-first [geschlossen]

618

Welche Vor- und Nachteile hat die Verwendung von Entity Framework 4.1 Code-first gegenüber Model / Database-first mit EDMX-Diagramm?

Ich versuche, alle Ansätze zum Erstellen der Datenzugriffsschicht mit EF 4.1 vollständig zu verstehen. Ich verwende Repository-Muster und IoC.

Ich weiß, dass ich den Code-First-Ansatz verwenden kann: Definieren Sie meine Entitäten und den Kontext von Hand und verwenden Sie ihn ModelBuilderzur Feinabstimmung des Schemas.

Ich kann auch ein EDMXDiagramm erstellen und einen Codegenerierungsschritt auswählen, der T4-Vorlagen verwendet, um dieselben POCOKlassen zu generieren .

In beiden Fällen erhalte ich ein agnostisches POCOObjekt ORMund einen Kontext, der sich daraus ergibt DbContext.

Database-first scheint am ansprechendsten zu sein, da ich eine Datenbank in Enterprise Manager entwerfen, das Modell schnell synchronisieren und mithilfe des Designers optimieren kann.

Was ist der Unterschied zwischen diesen beiden Ansätzen? Geht es nur um die Präferenz VS2010 gegenüber Enterprise Manager?

Jakub Konecki
quelle
12
Entity Framework 7 löscht EDMX: msdn.microsoft.com/en-us/magazine/dn890367.aspx
CAD-
5
@CADbloke Entity Framework 7 ist jetzt Entity Framework Core 1.0
RBT
6
Für alle anderen Browser ist es wichtig, zuerst Code zu schreiben und sich Kopfschmerzen zu ersparen , es sei denn, Sie haben Probleme mit 7000 langen XML-Dateien und lösen Zusammenführungskonflikte in den oben genannten Fällen
Dan Pantry,
3
Es gibt eine gute Zusammenfassung der drei Ansätze im Januar
danio
4
Fast jede Antwort lautet "I Think" ... die absolute Definition von "Primary Opinion Based".
Lankymart

Antworten:

703

Ich denke die Unterschiede sind:

Code zuerst

  • Sehr beliebt, da Hardcore-Programmierer keine Designer mögen und die Definition von Mapping in EDMX xml zu komplex ist.
  • Volle Kontrolle über den Code (kein automatisch generierter Code, der schwer zu ändern ist).
  • Allgemeine Erwartung ist, dass Sie sich nicht mit DB beschäftigen. DB ist nur ein Speicher ohne Logik. EF kümmert sich um die Erstellung und Sie möchten nicht wissen, wie es die Arbeit erledigt.
  • Manuelle Änderungen an der Datenbank gehen höchstwahrscheinlich verloren, da Ihr Code die Datenbank definiert.

Datenbank zuerst

  • Sehr beliebt, wenn Sie eine von DBAs entworfene, separat entwickelte Datenbank haben oder wenn Sie eine vorhandene Datenbank haben.
  • Sie lassen EF Entitäten für Sie erstellen und nach Änderung der Zuordnung generieren Sie POCO-Entitäten.
  • Wenn Sie zusätzliche Funktionen in POCO-Entitäten wünschen, müssen Sie entweder die Vorlage ändern oder Teilklassen verwenden.
  • Manuelle Änderungen an der Datenbank sind möglich, da die Datenbank Ihr Domänenmodell definiert. Sie können das Modell jederzeit aus der Datenbank aktualisieren (diese Funktion funktioniert recht gut).
  • Ich verwende dies oft zusammen in VS-Datenbankprojekten (nur Premium- und Ultimate-Version).

Modell zuerst

  • IMHO beliebt, wenn Sie Designer-Fan sind (= Sie schreiben nicht gerne Code oder SQL).
  • Sie "zeichnen" Ihr Modell und lassen den Workflow Ihr Datenbankskript und die T4-Vorlage Ihre POCO-Entitäten generieren. Sie verlieren einen Teil der Kontrolle sowohl über Ihre Entitäten als auch über Ihre Datenbank, aber für kleine einfache Projekte sind Sie sehr produktiv.
  • Wenn Sie zusätzliche Funktionen in POCO-Entitäten wünschen, müssen Sie entweder die Vorlage ändern oder Teilklassen verwenden.
  • Manuelle Änderungen an der Datenbank gehen höchstwahrscheinlich verloren, da Ihr Modell die Datenbank definiert. Dies funktioniert besser, wenn Sie ein Netzteil zur Datenbankgenerierung installiert haben. Damit können Sie das Datenbankschema aktualisieren (anstatt es neu zu erstellen) oder Datenbankprojekte in VS aktualisieren.

Ich gehe davon aus, dass es im Fall von EF 4.1 einige andere Funktionen gibt, die sich auf Code First vs. Model / Database First beziehen. Die zuerst in Code verwendete fließende API bietet nicht alle Funktionen von EDMX. Ich gehe davon aus, dass Funktionen wie die Zuordnung gespeicherter Prozeduren, Abfrageansichten, das Definieren von Ansichten usw. funktionieren, wenn Modell / Datenbank zuerst verwendet wird und DbContext(ich habe es noch nicht ausprobiert), aber nicht zuerst im Code.

Ladislav Mrnka
quelle
5
@Ladislav - danke für die umfassende Antwort. Nur zur Klarstellung: Abgesehen von einigen Einschränkungen der fließenden API gibt es keine wirklichen technischen Unterschiede zwischen diesen Ansätzen? Es geht mehr um Entwicklung / Bereitstellungsprozess / Methodik? Zum Beispiel habe ich separate Umgebungen für Dev / Test / Beta / Prod und ich werde die Datenbank manuell auf Beta / Prod aktualisieren, da Änderungen am Schema möglicherweise einige komplexe Datenänderungen erfordern. Mit Dev / Test freue ich mich, dass EF Datenbanken löschen und erstellen kann, da ich sie selbst in den Initialisierern mit Testdaten versehen werde.
Jakub Konecki
152
Ich habe Datenbanken so lange entworfen, dass ich mir nicht vorstellen kann, jemals etwas anderes als die Datenbank zuerst zu tun. Tatsächlich schreibe ich immer noch viele gespeicherte Prozeduren für die Select-Anweisungen mit höherem Volumen und dergleichen, und dann werde ich im Namen der Leistung einen Funktionsimport in das EF-Modell durchführen.
Steve Wortham
9
Was meinen Sie mit Select-Anweisungen mit hohem Volumen? Gespeicherte Prozeduren sind nicht schneller als SELECTs, die von der Anwendung gesendet werden.
Piotr Perak
20
Sie können SQL in Ihrer Anwendung haben. Dieses SQL wird höchstwahrscheinlich in kompilierten Code eingebettet sein, und alle Änderungen erfordern eine Neukompilierung und erneute Bereitstellung, während eine Änderung der gespeicherten Prozedur nur die Bearbeitung der gespeicherten Prozedur erfordert. Kunden / Kunden / Benutzer sind in diesem Fall weniger von Änderungen betroffen.
CodeWarrior
5
@JakubKonecki, was auch immer Sie nicht in dem finden DbContext, das in ObjectContexteinfachem Gebrauch existiert ((IObjectContextAdapter)dbcontext).ObjectContext.
Shimmy Weitzhandler
134

Ich denke, dieser einfache "Entscheidungsbaum" von Julie Lerman, der Autorin von "Programming Entity Framework", sollte helfen, die Entscheidung mit mehr Vertrauen zu treffen:

Ein Entscheidungsbaum, der bei der Auswahl verschiedener Ansätze mit EF hilft

Mehr Infos hier .

Bahador Izadpanah
quelle
111
Dies ist nicht vollständig. Was ist, wenn Sie keinen visuellen Designer verwenden möchten, aber eine vorhandene Datenbank haben?
Dave New
14
Schlimmer noch ... Entscheidungen im wirklichen Leben werden nicht durch Diagramme getroffen, sondern durch technische Einschränkungen, mit denen Sie bei der Verwendung von Code-First konfrontiert sind. Sie können beispielsweise keinen eindeutigen Index für ein Feld erstellen oder hierarchische Daten in einer Baumtabelle für Sie nicht löschen benötigen einen CTE unter Verwendung des context.Table.SqlQuery ("select ..."). Modell / Datenbank zuerst haben diese Nachteile nicht.
Elisabeth
32
@davenewza das ist der erste Weg, nicht wahr?
Chris S
3
@davenewza vorhandene Datenbank => vorhandene Klassen? Code zuerst: Datenbank zuerst :)
Riadh Gomri
4
@davenewza Verwenden Sie Entity Framework Powertools, um Ihre POCO-Klassen aus DB zu erstellen. Code zuerst zu einer vorhandenen Datenbank
Iman Mahmoudinasab
50

Datenbank zuerst und Modell zuerst hat keine wirklichen Unterschiede. Der generierte Code ist derselbe und Sie können diese Ansätze kombinieren. Sie können beispielsweise eine Datenbank mit dem Designer erstellen, dann die Datenbank mit einem SQL-Skript ändern und Ihr Modell aktualisieren.

Wenn Sie zuerst Code verwenden, können Sie das Modell nicht ändern, ohne die Datenbank neu zu erstellen und alle Daten zu verlieren. IMHO ist diese Einschränkung sehr streng und erlaubt nicht, Code zuerst in der Produktion zu verwenden. Im Moment ist es nicht wirklich verwendbar.

Der zweite kleine Nachteil des Codes besteht darin, dass der Modellbauer Berechtigungen für die Masterdatenbank benötigt. Dies hat keine Auswirkungen auf Sie, wenn Sie die SQL Server Compact-Datenbank verwenden oder den Datenbankserver steuern.

Der Vorteil von Code ist zunächst sehr sauberer und einfacher Code. Sie haben die volle Kontrolle über diesen Code und können ihn einfach ändern und als Ansichtsmodell verwenden.

Ich kann empfehlen, den Code First-Ansatz zu verwenden, wenn Sie eine einfache eigenständige Anwendung ohne Versionierung erstellen und zuerst model \ database in Projekten verwenden, die in der Produktion geändert werden müssen.

Stepan Smagin
quelle
7
Wenn Sie die Produktionsumgebung manuell mit SQL-Skripten aktualisieren möchten, können Sie dies auch mit Code First tun. Sie generieren einfach die Änderungsskripte nach Bedarf. Mehrere Tools können diese Deltas automatisieren, und Sie können Code First weiterhin verwenden. Sie müssen lediglich den Code First-Initialisierer in "CreateDatabaseIfNotExists" ändern, um die aktuelle Datenbank nicht zu löschen.
Esteban Brenes
Einige Unterschiede bestehen darin, Ansichten zu importieren und dann die Datenbank neu zu generieren, in der die Ansichten zu Tabellen werden. Macht es schwierig, eine neue Datenbank zu erstellen und mit der Produktdatenbank zu vergleichen, um festzustellen, ob sie synchron ist.
Dave
Model First unterstützt keine benutzerdefinierten SQL-Funktionen (zumindest in EF4 weiß ich nicht, ob sich dies geändert hat). Mit Database First können Sie UDFs importieren und in Ihren LINQ-Abfragen verwenden.
Tsahi Asher
Keine Unterschiede? Versuchen Sie, Ansichten und SimpleMembership-Tabellen zu importieren, und generieren Sie dann eine Datenbank aus dem Modell, um zu sehen, was Sie erhalten. Nicht einmal annähernd! Diese sollten eine Rundreise machen, aber dann hat MSFT MF und DF anstelle von CF grundsätzlich aufgegeben, was auch hinsichtlich der Verwendung von Ansichten und gespeicherten Prozessen unvollständig ist.
Dave
Sie können den Code First Migrations-basierten Datenbankwiederherstellungsprozess deaktivieren und manuell in Modell und Datenbank ausführen. Sie können dies tun, indem Sie disableDatabaseInitialization = "true" in Ihrer web / app.config unter <EntityFramework> ..... <contexts> <context type = "myNamespace.mydbContext", "myassemblyORProject" disableDatabaseInitialization = "true" /> angeben </ EntityFramework> Sie können den Migrationsordner löschen.
Hasteq
37

Zitieren der relevanten Teile von http://www.itworld.com/development/405005/3-reasons-use-code-first-design-entity-framework

3 Gründe, Code First Design mit Entity Framework zu verwenden

1) Weniger Cruft, weniger Aufblähen

Die Verwendung einer vorhandenen Datenbank zum Generieren einer EDMX-Modelldatei und der zugehörigen Codemodelle führt zu einem riesigen Stapel automatisch generierten Codes. Sie werden gebeten, diese generierten Dateien niemals zu berühren, damit Sie nichts beschädigen oder Ihre Änderungen bei der nächsten Generation überschrieben werden. Der Kontext und der Initialisierer sind auch in diesem Durcheinander zusammengeklemmt. Wenn Sie Ihren generierten Modellen Funktionen hinzufügen möchten, z. B. eine berechnete schreibgeschützte Eigenschaft, müssen Sie die Modellklasse erweitern. Dies ist eine Anforderung für fast jedes Modell und Sie erhalten eine Erweiterung für alles.

Mit Code werden Ihre handcodierten Modelle zuerst zu Ihrer Datenbank. Die genauen Dateien, die Sie erstellen, generieren das Datenbankdesign. Es gibt keine zusätzlichen Dateien und es ist nicht erforderlich, eine Klassenerweiterung zu erstellen, wenn Sie Eigenschaften hinzufügen möchten oder was auch immer die Datenbank nicht wissen muss. Sie können sie einfach derselben Klasse hinzufügen, solange Sie der richtigen Syntax folgen. Sie können sogar eine Model.edmx-Datei generieren, um Ihren Code zu visualisieren, wenn Sie möchten.

2) Größere Kontrolle

Wenn Sie zuerst in die Datenbank gehen, sind Sie dem ausgeliefert, was für Ihre Modelle zur Verwendung in Ihrer Anwendung generiert wird. Gelegentlich ist die Namenskonvention unerwünscht. Manchmal sind die Beziehungen und Assoziationen nicht ganz das, was Sie wollen. In anderen Fällen verursachen nicht vorübergehende Beziehungen mit verzögertem Laden Chaos in Ihren API-Antworten.

Während es fast immer eine Lösung für Probleme bei der Modellgenerierung gibt, auf die Sie möglicherweise stoßen, bietet Ihnen der erste Code von Anfang an eine vollständige und fein abgestimmte Kontrolle. Sie können jeden Aspekt Ihrer Codemodelle und Ihres Datenbankdesigns bequem von Ihrem Geschäftsobjekt aus steuern. Sie können Beziehungen, Einschränkungen und Assoziationen genau angeben. Sie können gleichzeitig Eigenschaftszeichenbeschränkungen und Datenbankspaltengrößen festlegen. Sie können angeben, welche verwandten Sammlungen eifrig geladen oder überhaupt nicht serialisiert werden sollen. Kurz gesagt, Sie sind für mehr Dinge verantwortlich, haben aber die volle Kontrolle über Ihr App-Design.

3) Datenbankversionskontrolle

Dies ist eine große. Die Versionierung von Datenbanken ist schwierig, aber mit Code First- und Code First-Migrationen ist sie viel effektiver. Da Ihr Datenbankschema vollständig auf Ihren Codemodellen basiert, helfen Sie durch Versionskontrolle Ihres Quellcodes bei der Versionierung Ihrer Datenbank. Sie sind für die Steuerung Ihrer Kontextinitialisierung verantwortlich, die Ihnen dabei helfen kann, beispielsweise festgelegte Geschäftsdaten zu erstellen. Sie sind auch für die Erstellung der ersten Code-Migrationen verantwortlich.

Wenn Sie Migrationen zum ersten Mal aktivieren, werden eine Konfigurationsklasse und eine erste Migration generiert. Die anfängliche Migration ist Ihr aktuelles Schema oder Ihre Baseline v1.0. Ab diesem Zeitpunkt fügen Sie Migrationen hinzu, die mit einem Zeitstempel versehen und mit einem Deskriptor gekennzeichnet sind, um die Reihenfolge der Versionen zu erleichtern. Wenn Sie Add-Migration vom Paketmanager aus aufrufen, wird eine neue Migrationsdatei generiert, die alles enthält, was sich in Ihrem Codemodell automatisch geändert hat, sowohl in einer UP () - als auch in einer DOWN () -Funktion. Die UP-Funktion wendet die Änderungen auf die Datenbank an. Die DOWN-Funktion entfernt dieselben Änderungen für den Fall, dass Sie ein Rollback durchführen möchten. Darüber hinaus können Sie diese Migrationsdateien bearbeiten, um zusätzliche Änderungen wie neue Ansichten, Indizes, gespeicherte Prozeduren und andere Elemente hinzuzufügen. Sie werden zu einem echten Versionsverwaltungssystem für Ihr Datenbankschema.

Sagte Roohullah Allem
quelle
31

Code-first scheint der aufgehende Stern zu sein. Ich habe mir Ruby on Rails kurz angesehen, und ihr Standard ist Code-First mit Datenbankmigrationen.

Wenn Sie eine MVC3-Anwendung erstellen, hat Code meiner Meinung nach zunächst die folgenden Vorteile:

  • Einfache Attributdekoration - Sie können Felder mit Validierung, Anforderung usw. dekorieren. Bei der EF-Modellierung ist dies recht umständlich
  • Keine seltsamen Modellierungsfehler - Die EF-Modellierung weist häufig seltsame Fehler auf. Wenn Sie beispielsweise versuchen, eine Zuordnungseigenschaft umzubenennen, muss sie mit den zugrunde liegenden Metadaten übereinstimmen - sehr unflexibel.
  • Nicht umständlich zusammenzuführen - Wenn Sie Tools zur Kontrolle der Codeversion wie mercurial verwenden, ist das Zusammenführen von .edmx-Dateien ein Problem. Sie sind ein Programmierer, der an C # gewöhnt ist, und dort führen Sie eine .edmx-Datei zusammen. Nicht so bei Code-First.
  • Wenn Sie zuerst zu Code zurückkehren, haben Sie die vollständige Kontrolle, ohne die versteckten Komplexitäten und Unbekannten zu bewältigen.
  • Ich empfehle Ihnen, das Befehlszeilentool von Package Manager zu verwenden. Verwenden Sie nicht einmal die grafischen Tools, um Gerüstansichten einen neuen Controller hinzuzufügen.
  • DB-Migrationen - Dann können Sie auch Migrationen aktivieren. Das ist so mächtig. Sie nehmen Änderungen an Ihrem Modell im Code vor, und dann kann das Framework Schemaänderungen verfolgen, sodass Sie Upgrades nahtlos bereitstellen können, wobei Schemaversionen automatisch aktualisiert (und bei Bedarf heruntergestuft) werden. (Nicht sicher, aber dies funktioniert wahrscheinlich auch mit model-first)

Aktualisieren

Die Frage verlangt auch einen Vergleich von Code-First mit EDMX-Modell / DB-First. Code-first kann auch für beide Ansätze verwendet werden:

Todd
quelle
3
Model-first codiert nicht zuerst den POCO, sondern Code First. Model-First ist ein Visual Designer, mit dem POCOs automatisch generiert und anschließend Datenbanken aus dem Modell generiert werden.
Diego Mendes
Heutzutage können Sie sowohl auf der visuellen als auch auf der Code-Route entweder zuerst "Modell" oder zuerst "Datenbank" ausführen. Das erste ist das manuelle Design (entweder über Code oder einen visuellen Editor), das zweite ist das Erstellen einer Datenbank und das Erstellen des Modells (entweder POCOs oder EDMX).
Todd
11

Ich verwende zuerst die EF-Datenbank, um mehr Flexibilität und Kontrolle über die Datenbankkonfiguration zu bieten.

EF-Code zuerst und Modell zuerst schienen cool zu sein und bieten Datenbankunabhängigkeit. Dabei können Sie jedoch nicht angeben, was ich als sehr grundlegende und allgemeine Informationen zur Datenbankkonfiguration betrachte. Zum Beispiel Tabellenindizes, Sicherheitsmetadaten oder einen Primärschlüssel, der mehr als eine Spalte enthält. Ich finde, ich möchte diese und andere gängige Datenbankfunktionen verwenden und muss daher trotzdem einige Datenbankkonfigurationen direkt durchführen.

Ich finde, dass die Standard-POCO-Klassen, die während der DB zuerst generiert wurden, sehr sauber sind, jedoch keine sehr nützlichen Datenanmerkungsattribute oder Zuordnungen zu gespeicherten Prozeduren aufweisen. Ich habe die T4-Vorlagen verwendet, um einige dieser Einschränkungen zu überwinden. T4-Vorlagen sind fantastisch, insbesondere wenn sie mit Ihren eigenen Metadaten und Teilklassen kombiniert werden.

Das Modell scheint zunächst viel Potenzial zu haben, gibt mir aber viele Fehler beim Refactoring komplexer Datenbankschemata. Nicht sicher warum.

user1618371
quelle
4
Sie können zusammengesetzte Schlüssel mit Code zuerst definieren - stackoverflow.com/questions/5466374/…
Jakub Konecki
3
Für zukünftige Leser ist dies nicht mehr der Fall. Sie können in EF Code First Indizes, mehrspaltige Primärschlüssel und dergleichen hinzufügen.
tobiak777
1
EF sollte behoben worden sein, damit alle 3 Ansätze austauschbar in derselben Datenbank verwendet werden können, da es Vor- und Nachteile für alle 3 Ansätze gibt
Dave
Darüber hinaus ist die Wahrheit einer nicht idealen Code-First-Lösung, die ich aufgrund der Migration auf eine andere IDE / Sprache in der Zukunft zuerst verwende, und ich möchte eine solide und integrierte Datenbankstruktur haben. Eine weitere Tatsache, die ich zuerst als Datenbank bevorzuge, ist die Flexibilität beim Ändern eines Teils von Datenspeicher.
QMaster
7

Die Arbeit mit großen Modellen war vor dem SP1 sehr langsam (habe es nach dem SP1 nicht versucht, aber es wird gesagt, dass dies jetzt ein Kinderspiel ist).

Ich entwerfe immer noch zuerst meine Tabellen, dann generiert ein selbst erstelltes Tool die POCOs für mich, sodass es die Last übernimmt, sich wiederholende Aufgaben für jedes Poco-Objekt auszuführen.

Wenn Sie Versionsverwaltungssysteme verwenden, können Sie den Verlauf Ihrer POCOs leicht verfolgen. Mit vom Designer generiertem Code ist dies nicht so einfach.

Ich habe eine Basis für meinen POCO, was viele Dinge ziemlich einfach macht.

Ich habe Ansichten für alle meine Tabellen, jede Basisansicht enthält grundlegende Informationen für meine Fremdschlüssel und meine Ansicht POCOs stammen aus meinen POCO-Klassen, was wiederum sehr nützlich ist.

Und schließlich mag ich keine Designer.

Hazimdikenli
quelle
8
"Wenn Sie Versionsverwaltungssysteme verwenden, können Sie den Verlauf Ihrer POCOs leicht verfolgen. Mit vom Designer generiertem Code ist dies nicht so einfach." - Ich behalte vom Designer generierten Code in der Quellcodeverwaltung, damit ich immer den Verlauf anzeigen kann.
Jakub Konecki
1
@JakubKonecki Haben Sie jemals versucht, EDMX-Dateien in einem Team von mehr als 3 Personen zusammenzuführen? Es ist nur ein Schmerz ... Stattdessen versuchen die Leute, das Zusammenführen zu vermeiden und nehmen einfach die andere Revision und wiederholen ihre eigenen Änderungen, da das Zusammenführen in einer automatisch generierten Datei mit Tausenden von XML-Zeilen häufig fehlschlägt.
Bytecode77
6

Beispiel für den ersten Ansatz der Datenbank:

Ohne Code zu schreiben: ASP.NET MVC / MVC3-Datenbank Erster Ansatz / Datenbank zuerst

Und ich denke, es ist besser als andere Ansätze, weil der Datenverlust bei diesem Ansatz geringer ist.

AukI
quelle
Könnten Sie näher darauf eingehen, dass beim ersten Ansatz von DB weniger Daten verloren gehen? Wie würden Sie eine Datentransformation durchführen, wenn Sie eine vorhandene Tabelle in zwei Teile aufteilen würden?
Jakub Konecki
Am Ende würden Sie wahrscheinlich ein SQL-Skript schreiben, das sich um die Transformation kümmert. Im Allgemeinen kündigte MS an, die Code First-Datenmigration mit ihrer neuen Version zu verbessern, sodass dies in Zukunft möglicherweise kein Argument mehr ist.
König
Das Problem mit der Datenbank ist zunächst, dass das Datenbankdesign im Allgemeinen fehlerhafte Abstraktionen aufweist, die in Ihr Modell gelangen ... Junction-Tabellen usw. Die Aufgabe der Datenbank besteht einfach darin, Ihr Modell beizubehalten.
Nerdfest
Diese "Antwort" ist eine Meinung, die auf Ihrer Argumentation ohne Fleisch basiert. Ein Satz macht keine Haltung.
TravisO
Könnten Sie näher darauf eingehen, dass beim ersten Ansatz von DB weniger Daten verloren gehen?
Amal50
4

IMHO Ich denke, dass alle Modelle einen großartigen Platz haben, aber das Problem, das ich mit dem Modell-First-Ansatz habe, besteht in vielen großen Unternehmen, in denen DBAs die Datenbanken steuern. Sie erhalten nicht die Flexibilität, Anwendungen zu erstellen, ohne Datenbank-First-Ansätze zu verwenden. Ich habe an vielen Projekten gearbeitet und als es um die Bereitstellung ging, wollten sie die volle Kontrolle.

So sehr ich mit allen möglichen Variationen einverstanden bin: Code First, Model First, Database First, müssen Sie die tatsächliche Produktionsumgebung berücksichtigen. Wenn Ihr System also eine große Benutzerbasisanwendung mit vielen Benutzern und Datenbankadministratoren sein soll, die die Show ausführen, sollten Sie die erste Option der Datenbank nur meiner Meinung nach in Betracht ziehen.

Matthew Parton
quelle
Du hast recht. MS gab Programmierern unterschiedliche Ansätze, da es sich um unterschiedliche Szenarien handelt. Sie sollten alles wissen und anhand Ihres Szenarios entscheiden, was für das Projekt am besten ist und was Ihnen am besten gefällt.
Sterling Diaz
0

Ich denke, einer der Vorteile von Code ist, dass Sie alle Änderungen sichern können, die Sie an einem Versionskontrollsystem wie Git vorgenommen haben. Da alle Ihre Tabellen und Beziehungen in im Wesentlichen nur Klassen gespeichert sind, können Sie in der Zeit zurückgehen und sehen, wie die Struktur Ihrer Datenbank zuvor war.

anonym_dojo
quelle