it-swarm.dev

Sollten wir Entity Framework verwenden?

Wir haben derzeit folgenden Stapel:

  • VS 2005
  • Webformulare
  • SQL Server 2005
  • IIS 6

Wir planen einen Übergang dazu:

  • VS 2010
  • MVC und Web Forms
  • SQL Server 2008
  • IIS 7

Meine Frage ist, wenn wir mit VS 2010 zu MVC wechseln, sollten wir Entity Framework (oder ein anderes ORM), ein Mikro-ORM (wie Massive ) oder einfach nur SQL verwenden?

Alle Tutorials, die ich über VS 2010 gelesen habe, sind darauf ausgerichtet, Entity Framework für Datentransaktionen zu verwenden. Wird dies jedoch auf absehbare Zeit (über 5 Jahre) der Fall sein?

Wenn es darauf ankommt, können die Anwendungen unseres Kunden zwischen 10 und 1.000 aktive Benutzer haben.

31
guanome

Ich habe kürzlich von Inline-SQL-Abfragen zu EF gewechselt und Folgendes gefunden:

Vorteile

  • Viel schneller, um die DAL zu erstellen (ich liebe es, die SQL-Abfragen nicht zu schreiben!)
  • Viel einfacher zu pflegen
  • Sie müssen nicht mehr daran denken, meine Eingaben zu analysieren, bevor Sie eine Inline-SQL-Anweisung erstellen. Dies bedeutet eine geringere Wahrscheinlichkeit eines SQL-Injection-Angriffs (natürlich ist dies abhängig von Ihren Abfragen immer noch möglich, aber viel weniger wahrscheinlich).

Nachteile

  • Kann nicht mehrere Datenbanken umfassen ... zumindest nicht einfach
  • Alle Entitäten (Tabellen, Ansichten usw.) benötigen einen Primärschlüssel
  • Wenn Sie eine einzelne Spalte in einer Tabelle mit mehr als 100 erforderlichen Spalten aktualisieren möchten (nicht mein Tabellendesign), müssen Sie alle 100 Spalten herunterziehen, um die Aktualisierung durchzuführen. Oder verwenden Sie eine gespeicherte Prozedur.
  • Ich hatte Probleme mit einigen Standardwerten, die auf SQL Server definiert wurden und nicht in das Entitätsmodell gezogen wurden, nachdem ein neuer Datensatz hinzugefügt wurde. Normalerweise handelt es sich dabei um berechnete Werte oder Werte, die in einem INSERT-Trigger hinzugefügt werden
  • Gelegentlich werden die SQL-Abfragen schlecht geschrieben und nur langsam ausgeführt. Wenn Sie eine langsam laufende Abfrage haben, führen Sie eine SQL-Ablaufverfolgung aus, um zu sehen, was EF tut. Es ist möglich, dass Sie diese Abfrage als SP oder View) überarbeiten können. Dies kommt jedoch nicht so oft vor.
  • Ich hatte einige Probleme beim Versuch, eine Zuordnung zwischen Tabellen zu erstellen, für die in SQL Server kein Fremdschlüssel definiert ist. Normalerweise liegt es daran, dass ich versuche, eine 1:0-1 - Beziehung zu erstellen, in der EF einen 1:0-* Verwenden möchte.

Ich bin allerdings kein EF-Experte, daher habe ich wahrscheinlich einige Dinge verpasst. Dies sind nur die Elemente, auf die ich in der Vergangenheit beim Wechsel von Inline-SQL zu Entity Framework gestoßen bin. Ich bin froh, dass ich den Wechsel gemacht habe, aber es gab Zeiten, in denen ich EF wegen seiner Macken wirklich gehasst habe.

45
Rachel

Entity Framework ist ein Produktivitätswerkzeug. Verwenden Sie die besten Tools, die Ihnen zur Verfügung stehen, es sei denn, Sie haben einen guten Grund, dies nicht zu tun (z. B. Sie arbeiten mit SQL 2000 oder haben keine Zeit, die Technologie zu verbessern).

Abgesehen davon finde ich das Konzept von Entitäten sehr gut auf das Modell des MVC-Musters zu übertragen. Während eine 1: 1-Beziehung zu Modellen und Tabellen eine schlechte Praxis ist, führt das Denken in Bezug auf Entitäten tendenziell zu sauberen Designs und einfach zu lesendem Code (insbesondere mit LINQ).

Entity Framework wird von Microsoft aktiv unterstützt. Niemand hat eine magische Kristallkugel, um zu sagen "Unterstützung wird X Jahre dauern". Ich sehe keinen Grund zu der Annahme, dass Entity in den nächsten 5 Jahren sterben wird.

12
P.Brian.Mackey

Eine andere mögliche Lösung besteht darin, eine alternative Entity Framework-Bibliothek zu verwenden, die nicht mit V.S. Es gibt einige im Internet.

Das Entity/3-Layer-Framework-Konzept gibt es schon seit einiger Zeit und es hat wie viele andere Entwickler mit mehreren benutzerdefinierten Bibliotheken zusammengearbeitet, bevor Microsoft sein eigenes "offizielles" Framework veröffentlichte.

Vorteile

Nutzen Sie die Vorteile des Entity-Frameworks (D.A.L.), ohne sich ständig an Microsoft-Bibliotheken/Framework-Änderungen zu halten.

Hinzufügen von Funktionen zu einer Bibliothek, die der vorhandenen offiziellen Bibliothek möglicherweise nicht zur Verfügung stehen, z. B. die Verwendung mehrerer dtabase-Marken.

Nachteile

Müssen die Bibliothek oder Tools unterstützen. Es ist sehr üblich, ein Code-Tool für den Entitätsgenerator zu haben, um die Enitites zu generieren.

4
umlcat

Sie müssen eine architektonische Entscheidung treffen, die auf dem Problem und der vorhandenen Lösung basiert. Wie bei jeder Technologie gibt es Vor- und Nachteile.

Ich persönlich würde normalerweise das Entity-Framework für Neuentwicklungen verwenden, aber den vorhandenen Code nicht neu schreiben. Sie erhalten dann die Geschwindigkeit für zukünftige Delelopments, müssen jedoch nicht viel Zeit in die Konvertierung von Code investieren. Der Nachteil dieses Ansatzes ist, dass er die Konsistenz verringert.

3
Tom Squires

In Ihrer Situation würde ich definitiv Entity Framework verwenden. Ich habe festgestellt, dass es mit MVC gut funktioniert.
Hier sind einige echte Gründe und Hinweise.

  • Es ist eine Freude, Linq zu verwenden, und die verzögerte Ausführung ist auch äußerst nützlich.
  • Sie können Ihre Modelle generieren (bei Verwendung mit mvc würde ich jedoch empfehlen, Ansichtsmodelle in Verbindung mit den Datenmodellen zu verwenden. Dies erleichtert die Validierung und Modellbindung erheblich, wenn Sie diesen Ansatz verwenden. Verwenden Sie automapper um die Änderungen wieder auf Ihr Datenmodell abzubilden).

Es gibt jedoch eine Reihe von Dingen, die Sie über die Verwendung eines ORM lernen müssen.

  • Was der Kontext für Sie tut (Entity Tracking)
  • Dass ein Kontext als Arbeitseinheit verwendet werden soll
  • Denken Sie daran, was Parallelität betrifft. EF kann Ihnen mitteilen, wenn Ihr Objekt veraltet ist. Es kann jedoch schwierig sein, wenn Sie die Parallelität über Anforderungen hinweg ordnungsgemäß behandeln möchten (da Sie einen Zeitstempel oder etwas anderes beibehalten müssen).

Dinge, die man beachten muss

  • Trigger und ORMs funktionieren nicht zusammen. Verwenden Sie stattdessen die ORM-Ereignisse.
  • Stellen Sie sicher, dass alle Ihre Tische Promary-Schlüssel haben.

Ich würde den Code First-Ansatz auch sehr empfehlen, selbst wenn Sie eine vorhandene Datenbank haben.

  • Die Konventionen bedeuten, dass Sie keine Zuordnungen oder Klassen neu generieren müssen, wenn Sie die Datenbank ändern.
  • Es ist einfacher, Validierung und andere Logik in die Modelle einzufügen.
  • Sie können den Codegenerator verwenden, um sie zu erstellen, wenn Sie über eine große vorhandene Datenbank verfügen.
2
Daniel Little