656 Stimmen

Code-first vs. Model/Database-first

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

Ich versuche, alle Ansätze zum Aufbau einer Datenzugriffsschicht mit EF 4.1 vollständig zu verstehen. Ich verwende das 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 ModelBuilder zur Feinabstimmung des Schemas.

Ich kann auch eine EDMX Diagramm und wählen Sie einen Codegenerierungsschritt, der T4-Vorlagen verwendet, um dieselbe POCO Klassen.

In beiden Fällen lande ich bei POCO Objekt, die ORM agnostisch und Kontext, der sich aus DbContext .

Database-first scheint mir am attraktivsten zu sein, da ich die Datenbank in Enterprise Manager entwerfen, das Modell schnell synchronisieren und mit dem Designer fein abstimmen kann.

Worin besteht nun der Unterschied zwischen diesen beiden Ansätzen? Geht es nur um die Präferenz VS2010 vs. Enterprise Manager?

12 Stimmen

Mit Entity Framework 7 wird EDMX abgeschafft: msdn.microsoft.com/de-us/magazine/dn890367.aspx

6 Stimmen

@CADbloke Entity Framework 7 ist jetzt Entity Framework Core 1.0

6 Stimmen

Zu allen anderen Browsern, es sei denn, Sie haben eine Vorliebe für 7000 lange XML-Dateien und das Lösen von Merge-Konflikten in den vorgenannten, zuerst den Code eingeben und ersparen Sie sich Kopfschmerzen

14voto

user1618371 Punkte 151

Ich verwende zunächst die EF-Datenbank, um mehr Flexibilität und Kontrolle über die Datenbankkonfiguration zu haben.

EF code first and model first schien zunächst cool zu sein und bietet Datenbankunabhängigkeit, aber dabei können Sie nicht angeben, was ich für sehr grundlegende und allgemeine Datenbankkonfigurationsinformationen halte. Zum Beispiel Tabellenindizes, Sicherheits-Metadaten oder ein Primärschlüssel mit mehr als einer Spalte. Ich möchte diese und andere gängige Datenbankfunktionen nutzen und muss daher ohnehin einige Datenbankkonfigurationen direkt vornehmen.

Ich finde, dass die Standard-POCO-Klassen, die während der DB-Erstellung generiert werden, sehr sauber sind, jedoch fehlen die sehr nützlichen Attribute für Datenannotationen oder Zuordnungen zu gespeicherten Prozeduren. Ich habe die T4-Vorlagen verwendet, um einige dieser Einschränkungen zu überwinden. T4-Vorlagen sind großartig, vor allem wenn man sie mit eigenen Metadaten und Teilklassen kombiniert.

Model first scheint viel Potenzial zu haben, verursacht aber viele Fehler beim Refactoring komplexer Datenbankschemata. Nicht sicher, warum.

4 Stimmen

Sie peut Zusammengesetzte Schlüssel zuerst mit Code definieren - stackoverflow.com/questions/5466374/

3 Stimmen

Für zukünftige Leser: Dies ist nicht mehr der Fall, Sie können Indizes, mehrspaltige Primärschlüssel und dergleichen in EF Code First hinzufügen.

1 Stimmen

EF hätte so festgelegt werden sollen, dass alle 3 Ansätze austauschbar für dieselbe Datenbank verwendet werden können, da alle 3 Ansätze Vor- und Nachteile haben.

7voto

hazimdikenli Punkte 5242

Das Arbeiten mit großen Modellen war vor dem SP1 sehr langsam (ich habe es nach dem SP1 nicht ausprobiert, aber es heißt, dass es jetzt ein Kinderspiel ist).

Ich entwerfe immer noch zuerst meine Tabellen, und dann generiert ein selbst entwickeltes Tool die POCOs für mich, so dass ich nicht mehr für jedes Poco-Objekt wiederholte Aufgaben erledigen muss.

Bei der Verwendung von Versionskontrollsystemen können Sie die Historie Ihrer POCOs leicht nachvollziehen, bei vom Designer generiertem Code ist das nicht so einfach.

Ich habe einen Sockel für meinen POCO, der mir vieles erleichtert.

Ich habe Ansichten für alle meine Tabellen, jede Basisansicht bringt grundlegende Informationen für meine Fremdschlüssel und meine Ansicht POCOs leiten von meinen POCO-Klassen, die wieder ziemlich nützlich ist.

Und schließlich mag ich keine Designer.

8 Stimmen

Wenn Sie ein Versionskontrollsystem verwenden, können Sie die Historie Ihrer POCOs leicht nachvollziehen, bei vom Designer generiertem Code ist das nicht so einfach. - Ich behalte den vom Designer generierten Code in der Versionsverwaltung, so dass ich den Verlauf jederzeit einsehen kann.

1 Stimmen

@JakubKonecki Haben Sie jemals versucht, EDMX-Dateien in einem Team von mehr als 3 Personen zusammenzuführen? Es ist einfach eine Qual... Stattdessen wird versucht, das Zusammenführen zu vermeiden und einfach die andere Revision zu nehmen und die eigenen Änderungen zu wiederholen, weil das Zusammenführen in einer automatisch generierten Datei mit Tausenden von XML-Zeilen leicht scheitern kann.

7voto

AukI Punkte 125

Beispiel für den ersten Ansatz einer Datenbank:

Ohne irgendeinen Code zu schreiben: ASP.NET MVC / MVC3 Database First Approach / Datenbank zuerst

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

0 Stimmen

Könnten Sie näher erläutern, warum es beim ersten DB-Ansatz "weniger Datenverlust" gibt? Wie würden Sie eine Datentransformation durchführen, wenn Sie eine bestehende Tabelle in zwei Teile aufteilen würden?

0 Stimmen

Würden Sie wahrscheinlich ein Sql-Skript schreiben, das sich um die Umwandlung kümmert. Im Allgemeinen hat MS angekündigt, die Code-First-Datenmigration mit der neuen Version zu verbessern, so dass dies in Zukunft vielleicht kein Argument mehr sein wird.

0 Stimmen

Das Problem mit der ersten Datenbank ist, dass das Datenbankdesign im Allgemeinen fehlerhafte Abstraktionen hat, die in Ihr Modell eindringen... Kreuzungstabellen usw. Die Aufgabe der Datenbank besteht einfach darin, Ihr Modell aufrechtzuerhalten.

5voto

Matthew Parton Punkte 79

IMHO bin ich der Meinung, dass alle Modelle ihren Platz haben, aber das Problem, das ich mit dem "Model First"-Ansatz habe, ist, dass man in vielen großen Unternehmen mit DBAs, die die Datenbanken kontrollieren, nicht die Flexibilität hat, Anwendungen zu entwickeln, ohne die Datenbank zuerst zu verwenden. Ich habe an vielen Projekten gearbeitet, und als es um die Bereitstellung ging, wollten sie die volle Kontrolle.

So sehr ich auch allen möglichen Varianten Code First, Model First, Database First zustimme, müssen Sie die tatsächliche Produktionsumgebung berücksichtigen. Wenn Ihr System also eine Anwendung für eine große Benutzerbasis mit vielen Benutzern und DBAs sein wird, dann sollten Sie die Option "Datenbank zuerst" in Betracht ziehen - nur meine Meinung.

1 Stimmen

Sie haben Recht. MS hat den Programmierern verschiedene Ansätze gegeben, weil es verschiedene Szenarien gibt. Sie sollten alle kennen und auf der Grundlage Ihres Szenarios entscheiden, was für das Projekt am besten ist, und dann, was Ihnen am besten gefällt.

2voto

anonymous_dojo Punkte 49

Ich denke, einer der Vorteile von Code First ist, dass man alle Änderungen, die man vorgenommen hat, in einem Versionskontrollsystem wie Git sichern kann. Da alle Ihre Tabellen und Beziehungen in Klassen gespeichert sind, können Sie in der Zeit zurückgehen und sehen, wie die Struktur Ihrer Datenbank vorher aussah.

1 Stimmen

Das ist ein gutes Argument

1 Stimmen

Visual Studio Ermöglicht die Erstellung eines Datenbankprojekts. Mit einem solchen Projekt haben Sie volle Schemaversionskontrolle, können DB-Schema und Daten vergleichen und Änderungsskripte generieren, Schema- oder Datenänderungen auf eine DB anwenden. Siehe visualstudio.microsoft.com/vs/features/ssdt

0 Stimmen

@Cogitator Ich weiß, dass diese Funktion für MSSQL-gesicherte Datenbanken verfügbar ist. Kennen Sie ein solches Projekt/Vorlage für MySQL-gestützte Datenbanken?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X