.net samples Entity Framework vs LINQ to SQL




linq to entities (14)

Jetzt, da .NET v3.5 SP1 veröffentlicht wurde (zusammen mit VS2008 SP1), haben wir nun Zugriff auf das .NET-Entity-Framework.

Meine Frage ist das. Wenn Sie sich zwischen der Verwendung von Entity Framework und LINQ to SQL als ORM entscheiden, was ist der Unterschied?

So wie ich es verstehe, ist das Entity Framework (wenn es mit LINQ zu Entitäten verwendet wird) ein "großer Bruder" von LINQ to SQL? Wenn dies der Fall ist - welche Vorteile hat es? Was kann es tun, was LINQ to SQL alleine nicht kann?


Ist LINQ to SQL wirklich tot? von Jonathan Allen für InfoQ.com

Matt Warren beschreibt [LINQ to SQL] als etwas, "das niemals existieren sollte". Im Grunde sollte es nur ein Stand-in sein, um ihnen zu helfen, LINQ zu entwickeln, bis das echte ORM fertig war.

...

Die Skalierung von Entity Framework hat dazu geführt, dass die .NET 3.5 / Visual Studio 2008 Frist nicht erreicht wurde. Es wurde rechtzeitig für das leider benannte ".NET 3.5 Service Pack 1" fertiggestellt, das eher eine Hauptversion als ein Service Pack war.

...

Entwickler mögen [ADO.NET Entity Framework] wegen der Komplexität nicht.

...

Ab .NET 4.0 wird LINQ to Entities die empfohlene Datenzugriffslösung für LINQ für relationale Szenarien sein.


Die Antworten hier haben viele der Unterschiede zwischen Linq2Sql und EF behandelt, aber es gibt einen wichtigen Punkt, dem wenig Aufmerksamkeit geschenkt wurde: Linq2Sql unterstützt nur SQL Server, während EF Provider für die folgenden RDBMS hat:

Zur Verfügung gestellt von Microsoft:

  • ADO.NET-Treiber für SQL Server, OBDC und OLE DB

Über Drittanbieter:

  • MySQL
  • Orakel
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Synergex
  • Feuervogel
  • Npgsql

um ein paar zu nennen.

Dies macht EF zu einer leistungsfähigen Programmierabstraktion über Ihren relationalen Datenspeicher, was bedeutet, dass Entwickler ein konsistentes Programmiermodell haben, um mit dem zugrunde liegenden Datenspeicher zu arbeiten. Dies könnte in Situationen nützlich sein, in denen Sie ein Produkt entwickeln, das sicherstellen soll, dass es mit einer großen Auswahl gängiger RDBMS zusammenarbeitet.

Eine andere Situation, in der diese Abstraktion nützlich ist, ist, wenn Sie Teil eines Entwicklungsteams sind, das mit einer Reihe unterschiedlicher Kunden oder Geschäftseinheiten innerhalb einer Organisation zusammenarbeitet, und Sie möchten die Produktivität der Entwickler verbessern, indem Sie die Anzahl der RDBMS reduzieren vertraut, um eine Reihe von verschiedenen Anwendungen auf verschiedenen RDBMS zu unterstützen.


Ich denke, wenn du etwas schnell entwickeln musst, ohne merkwürdige Dinge in der Mitte, und du brauchst die Möglichkeit, Entitäten zu haben, die deine Tabellen repräsentieren:

Linq2Sql kann ein guter Verbündeter sein, der mit LinQ ein großartiges Entwicklungstiming entfaltet.


Wenn Ihre Datenbank unkompliziert und einfach ist, wird LINQ to SQL ausreichen. Wenn Sie logische / abstrahierte Entitäten über Ihren Tabellen benötigen, dann gehen Sie zu Entity Framework.


Ich habe festgestellt, dass ich bei Verwendung von EF nicht mehrere Datenbanken innerhalb desselben Datenbankmodells verwenden kann. Aber in linq2sql konnte ich einfach die Schemanamen mit Datenbanknamen voranstellen.

Dies war einer der Gründe, warum ich anfing mit linq2sql zu arbeiten. Ich weiß nicht, ob EF diese Funktionalität noch erlaubt hat, aber ich erinnere mich daran zu lesen, dass es dafür gedacht war, dies nicht zuzulassen.


Ich habe hier eine sehr gute Antwort here die erklärt, wann ich was in einfachen Worten verwenden soll:

Die grundlegende Faustregel für das zu verwendende Framework ist die Planung der Bearbeitung Ihrer Daten in Ihrer Präsentationsebene.

  • Linq-To-Sql - Verwenden Sie dieses Framework, wenn Sie eine 1: 1-Beziehung Ihrer Daten in Ihrer Präsentationsebene bearbeiten möchten . Das bedeutet, dass Sie nicht beabsichtigen, Daten aus mehr als einer Tabelle in einer einzelnen Ansicht oder Seite zu kombinieren.

  • Entity Framework - Verwenden Sie dieses Framework, wenn Sie Daten aus mehr als einer Tabelle in Ihrer Ansicht oder Seite kombinieren möchten. Um dies deutlicher zu machen, sind die obigen Begriffe spezifisch für Daten, die in Ihrer Ansicht oder Seite manipuliert werden und nicht nur angezeigt werden. Dies ist wichtig zu verstehen.

Mit dem Entity Framework können Sie tabellarische Daten zusammenführen, um sie in einer editierbaren Form der Präsentationsschicht zu präsentieren, und dann, wenn dieses Formular gesendet wird, wird EF wissen, wie ALLE Daten aus den verschiedenen Tabellen aktualisiert werden.

Es gibt wahrscheinlich genauere Gründe, EF über L2S zu wählen, aber dies wäre wahrscheinlich der einfachste zu verstehen. L2S verfügt nicht über die Möglichkeit, Daten für die Darstellung von Ansichten zusammenzuführen.



LINQ to SQL und das Entity Framework sehen auf der Oberfläche ähnlich aus. Beide bieten LINQ-Abfragen für eine Datenbank unter Verwendung eines Datenmodells.

LINQ to SQL entstand aus dem LINQ-Projekt, das aus dem Team entstand, das mit der Sprachentwicklung arbeitete. Das Entity Framework war ein Projekt des Data-Programmability-Teams und konzentrierte sich auf die Entity SQL-Sprache. Microsoft hat nicht die Absicht, LINQ zu SQL zu entziehen.

LINQ to SQL ist immer noch der Teil von ADO.NET, während das Entity-Framework über eine separate API verfügt. Entity Framework ist die höhere Version von LINQ to SQL.Entity Framework verwendet Entity Data Model für die Überbrückung zwischen Ihrer Anwendung und Ihrem Datenspeicher. Es ist das Entity Data Model (EDM), das die Definition Ihres konzeptionellen Schemas sowie die Datenbankschemadaten bereitstellt, die für die Interaktion mit der Datenbank erforderlich sind, und schließlich ein Zuordnungsschema, das auf zwei verweist.

Hier sind einige Aufgaben, die von Entity Framework (Entity-Datenmodell) ausgeführt werden.

• Generiert automatisch Klassen aus dem Modell und aktualisiert diese Klassen dynamisch jedes Mal, wenn sich das Modell ändert.

• Kümmert sich um die gesamte Datenbankkonnektivität, so dass Entwickler nicht mit viel Code für die Interaktion mit der Datenbank belastet werden müssen.

• Bietet eine allgemeine Abfragesyntax für die Abfrage des Modells, nicht der Datenbank, und übersetzt diese Abfragen dann in Abfragen, die die Datenbank verstehen kann.

• Bietet einen Mechanismus zum Verfolgen von Änderungen an den Objekten des Modells, wie sie in den Anwendungen verwendet werden, und behandelt die Aktualisierungen der Datenbank.


LINQ zu SQL

  1. Homogene Datenquelle: SQL Server
  2. Empfohlen für kleine Projekte nur dort, wo die Datenstruktur gut gestaltet ist
  3. Die Zuordnung kann geändert werden, ohne dass Sie mit SqlMetal.exe neu kompilieren müssen
  4. .dbml (Datenbankauszeichnungssprache)
  5. Eins-zu-Eins-Zuordnung zwischen Tabellen und Klassen
  6. Unterstützt TPH Vererbung
  7. Unterstützt keine komplexen Typen
  8. Storage-First-Ansatz
  9. Datenbank-zentrierte Ansicht einer Datenbank
  10. Erstellt von C # -Team
  11. Unterstützt, aber nicht weiter verbessert

Entitätsrahmen

  1. Heterogeneus-Datenquelle: Unterstützen Sie viele Datenanbieter
  2. Empfohlen für alle neuen Projekte außer:
    • kleine (LINQ to SQL)
    • Wenn die Datenquelle eine flache Datei ist (ADO.NET)
  3. Die Zuordnung kann geändert werden, ohne dass beim Modellieren und Zuordnen von Dateien Metadaten-Artefaktprozess zum Kopieren in das Ausgabeverzeichnis neu kompiliert werden muss
  4. .edmx (Entity Data Model), das enthält:
    • SSDL (Speicherschema-Definitionssprache)
    • CSDL (Konzeptschema-Definitionssprache)
    • MSL (Mapping-Spezifikationssprache)
  5. Eins-zu-eins-Eins-zu-viele-Zuordnungen zwischen Tabellen und Klassen
  6. Unterstützt Vererbung:
    • TPH (Tabelle pro Hierarchie)
    • TPT (Tabelle pro Typ)
    • TPC (Tabelle pro Betonklasse)
  7. Unterstützt komplexe Typen
  8. Code-first, Model-first, Storage-first-Ansätze
  9. Anwendungszentrische Ansicht einer Datenbank
  10. Erstellt von SQL Server-Team
  11. Zukunft der Microsoft Data APIs

Siehe auch:


Mein Eindruck ist, dass Ihre Datenbank ziemlich riesig oder sehr schlecht entworfen ist, wenn Linq2Sql nicht Ihren Bedürfnissen entspricht. Ich habe ungefähr 10 Websites, die größer und kleiner sind und alle Linq2Sql verwenden. Ich habe viele Male nach Entity-Framework gesucht, aber ich kann keinen guten Grund finden, es über Linq2Sql zu verwenden. Das heißt, ich versuche, meine Datenbanken als Modell zu verwenden, also habe ich bereits eine 1 zu 1 Zuordnung zwischen Modell und Datenbank.

Bei meiner derzeitigen Arbeit haben wir eine Datenbank mit über 200 Tabellen. Eine alte Datenbank mit vielen schlechten Lösungen, so dass ich den Nutzen von Entity Framework gegenüber Linq2Sql sehen konnte, aber trotzdem würde ich die Datenbank lieber neu gestalten, da die Datenbank die Engine der Anwendung ist und wenn die Datenbank schlecht entworfen und langsam ist meine Anwendung wird auch langsam sein. Das Entity-Framework in einer solchen Datenbank zu verwenden, scheint ein Quickfix zu sein, um das schlechte Modell zu tarnen, aber es könnte niemals die schlechte Performance verschleiern, die man von einer solchen Datenbank bekommt.


Linq zu SQL

Es ist Provider, es unterstützt nur SQL Server. Es ist eine Zuordnungstechnologie zum Zuordnen von SQL Server-Datenbanktabellen zu .NET-Objekten. Ist Microsoft der erste Versuch eines ORM - Object-Relational Mapper.

Linq-zu-Entitäten

Ist die gleiche Idee, aber mit Entity Framework im Hintergrund, wie das ORM - wieder von Microsoft, unterstützt es mehrere Datenbank Hauptvorteil des Entity-Framework ist Entwickler kann auf jeder Datenbank arbeiten keine Notwendigkeit, Syntax zu lernen, um jede Operation auf verschiedenen Datenbanken durchzuführen

Meiner persönlichen Erfahrung nach ist Ef besser (wenn man keine Ahnung von SQL hat) ist die Performance in LINQ etwas schneller als im Vergleich zur EF-LINQ-Sprache, die in Lambda geschrieben wurde.


Weder unterstützt noch die eindeutigen SQL 2008-Datentypen. Der Unterschied zu meiner Perspektive besteht darin, dass Entity in einigen zukünftigen Releases immer noch die Möglichkeit hat, ein Modell für meinen geografischen Datentyp zu erstellen, und Linq to SQL wird, wenn es aufgegeben wird, niemals funktionieren.

Fragen Sie, was mit nHibernate oder OpenAccess los ist ...


Ich arbeite für Kunden mit einem großen Projekt, das Linq-to-SQL verwendet. Als das Projekt gestartet wurde, war es die offensichtliche Wahl, da Entity Framework zu dieser Zeit einige Hauptmerkmale fehlte und die Performance von Linq-to-SQL viel butter war.

Jetzt hat sich EF entwickelt und Linq-to-SQL fehlt eine Hauptfunktion für hochskalierbare Dienste und das ist Unterstützung für asynchrone Operationen. Wir haben manchmal mehr als 100 Anfragen pro Sekunde und obwohl wir unsere Datenbanken optimiert haben, dauern die meisten Anfragen immer noch einige Millisekunden. Aufgrund der synchronen Datenbankaufrufe ist der Thread blockiert und für andere Anforderungen nicht verfügbar.

Wir denken, nur für diese Funktion zu Entity Framework zu wechseln. Es ist eine Schande, dass Microsoft die Async-Unterstützung nicht in Linq-to-SQL implementiert hat (oder Open-Source-Software, damit die Community dies tun kann).


Meine Erfahrung mit Entity Framework war weniger als hervorragend. Zuerst müssen Sie von den EF-Basisklassen erben, also verabschieden Sie sich von POCOs. Dein Entwurf muss um den EF herum sein. Mit LinqtoSQL konnte ich meine bestehenden Geschäftsobjekte verwenden. Außerdem gibt es kein Lazy Loading, das müssen Sie selbst implementieren. Es gibt einige Arbeitsumgebungen, die POCOs und Lazy Loading verwenden, aber sie existieren IMHO, weil EF noch nicht fertig ist. Ich habe vor, nach 4.0 wieder darauf zurückzukommen





linq-to-sql