868 Stimmen

Entity Framework gegenüber LINQ to SQL

Mit der Veröffentlichung von .NET v3.5 SP1 (zusammen mit VS2008 SP1) haben wir nun Zugriff auf das .NET Entity Framework.

Meine Frage ist folgende. Wenn Sie versuchen, zwischen der Verwendung des Entity Framework und LINQ to SQL als ORM zu entscheiden, was ist der Unterschied?

So wie ich es verstehe, ist das Entity Framework (wenn es mit LINQ to Entities verwendet wird) ein "großer Bruder" von LINQ to SQL? Wenn das der Fall ist - welche Vorteile hat es dann? Was kann es leisten, was LINQ to SQL allein nicht leisten kann?

145 Stimmen

Ich denke, dass die folgenden Antworten noch einmal überdacht werden sollten, da es schon lange her ist, dass EF veröffentlicht wurde, so dass neue Entwickler, die hierher kommen, einen falschen Eindruck bekommen können. EF ist seit seiner frühen Veröffentlichung ein GROSSARTIGES und EINFACHES Werkzeug geworden. Man muss nur die Verbindung zur DB einrichten und das ist zu 90% alles, was man braucht. Sehr schnelle Entwicklung, von einem erfahrenen Standpunkt aus gesehen! Von dort aus ist LINQ Ihr bester Freund. Es ist in hohem Maße anpassbar, MVC lieben es, und die Leute, die sagen, es ist schlecht - Lernen Sie, wie man es zuerst verwenden (und halten Sie auf LINQ als gut)!

11 Stimmen

Nur damit es klar ist - es ist nicht so, dass Sie jetzt die Wahl haben - MSFT hat LINQ2SQL zugunsten von EF effektiv abgeschafft. Allerdings hat die Tatsache, dass MSFT EF als Open Source zur Verfügung stellt, dazu beigetragen, dass es weniger schlecht ist und definitiv besser wird. Aber für alle, die sich für EF interessieren, sei gesagt, dass es immer noch eine Menge Macken in EF gibt. Ich habe über eine gepostet - stackoverflow.com/questions/305092/

5 Stimmen

@kape123, (a) LINQ to SQL ist nicht "tot"; es ist immer noch verwendbar; (b) LINQ to SQL ist die Standardmethode für den Datenzugriff bei der Entwicklung von Windows Phone 8.

496voto

Kris Punkte 6068

LINQ to SQL unterstützt nur 1 zu 1 Mapping von Datenbanktabellen, Views, Sprocs und Funktionen, die in Microsoft SQL Server verfügbar sind. Es ist eine großartige API, die für den schnellen Datenzugriff auf relativ gut gestaltete SQL Server-Datenbanken verwendet werden kann. LINQ2SQL wurde erstmals mit C# 3.0 und .Net Framework 3.5 veröffentlicht.

LINQ to Entities (ADO.Net Entity Framework) ist eine ORM (Object Relational Mapper) API, die eine umfassende Definition von Objektdomänenmodellen und deren Beziehungen zu vielen verschiedenen ADO.Net-Datenanbietern ermöglicht. So können Sie eine Reihe von verschiedenen Datenbankanbietern, Anwendungsservern oder Protokollen kombinieren, um ein aggregiertes Mash-up von Objekten zu entwerfen, die aus einer Vielzahl von Tabellen, Quellen, Diensten usw. aufgebaut sind. ADO.Net Framework wurde mit dem .Net Framework 3.5 SP1 veröffentlicht.

Dies ist ein guter Einführungsartikel auf MSDN: Einführung in LINQ für relationale Daten

1 Stimmen

Sieht so aus, als würden Sie LINQ to SQL zur Abfrage in der EF verwenden

13 Stimmen

@CoffeeAddict, während sie im Stil mit LINQ-Lambdas sehr ähnlich sind, hat jede API völlig unterschiedliche Grundlagen. Zum Beispiel ermöglicht die Art und Weise, wie LINQ2SQL SQL-Abfragen generiert, die Verwendung von SQL-Funktionen, während L2E dies nicht tut, oder zumindest nicht seit 2008.

3 Stimmen

Der objektorientierte Ansatz von EF macht es wirklich einfach und bequem zu benutzen, kann sehr schnell programmiert und verwaltet werden. Für mich einfach der beste Weg, um auf Daten zuzugreifen.

211voto

Brad Tutterow Punkte 7437

Ich denke, die schnelle und schmutzige Antwort ist, dass

  • LINQ to SQL ist der schnelle und einfache Weg, dies zu tun. Das bedeutet, dass Sie schneller loslegen und schneller Ergebnisse liefern können, wenn Sie an einem kleineren Projekt arbeiten.
  • Entity Framework ist die kompromisslose Art, dies zu tun. Das bedeutet, dass Sie im Vorfeld mehr Zeit benötigen, langsamer entwickeln und mehr Flexibilität haben, wenn Sie an etwas Größerem arbeiten.

33 Stimmen

Außerdem müssen Sie mit L2S in der Regel weniger Codezeilen schreiben, um dasselbe zu erreichen wie mit EF. Das Fehlen von Lazy Loading in EF bedeutet, dass Sie immer prüfen müssen, ob etwas geladen wurde oder nicht.

0 Stimmen

Brad, was würden Sie für eine E-Commerce-Website vorschlagen? Ich meine, ich kann nicht sehen, etwas anderes als einfache CRUDs gehen auf dort...

2 Stimmen

@CoffeeAddict offensichtlich, die Top 3 der meistgewählten Antworten sagt L2S für einfache CRUD

112voto

Zack Peterson Punkte 54531

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

Matt Warren beschreibt [LINQ to SQL] als etwas, das "eigentlich gar nicht existieren sollte". Im Grunde sollte es nur ein Ersatz sein, um die Entwicklung von LINQ zu unterstützen, bis das echte ORM fertig war.

...

Der Umfang von Entity Framework führte dazu, dass der Termin für .NET 3.5/Visual Studio 2008 nicht eingehalten werden konnte. Es wurde rechtzeitig für das unglücklich benannte ".NET 3.5 Service Pack 1" fertiggestellt, das eher ein Major Release 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 to relationale Szenarien sein.

58 Stimmen

Eigentlich mögen wir EF nicht, weil es ein so schlechtes Design hat und so extrem ist, extrem Buggy. Ich habe es nie als besonders komplex empfunden.

13 Stimmen

Viele große E-Commerce-Websites verwenden LINQ to SQL. Beispiele: Redbox, Stackoverflow, usw.

14 Stimmen

Ich kenne eine Menge guter Entwickler, die LINQ to SQL verwenden und sagen, dass diese Artikel völlig übertrieben sind. Ich stimme zu. LINQ to SQL wurde und wird immer noch in leistungsstarken .coms verwendet.

100voto

JamesSugrue Punkte 14661

Es gibt eine Reihe von offensichtlichen Unterschieden, die in dem von @lars geposteten Artikel beschrieben werden, aber die kurze Antwort lautet:

  • L2S ist eng gekoppelt - Objekteigenschaft an ein bestimmtes Feld der Datenbank oder besser gesagt, Objektzuordnung an ein bestimmtes Datenbankschema
  • L2S funktioniert nur mit SQL Server (so weit ich weiß)
  • EF ermöglicht das Mapping einer einzelnen Klasse auf mehrere Tabellen
  • EF wird M-M Beziehungen behandeln
  • EF wird die Möglichkeit haben, jeden ADO.NET-Datenanbieter anzusprechen

Die ursprüngliche Prämisse war, dass L2S für die schnelle Entwicklung und EF für eher "unternehmerische" n-Tier-Anwendungen gedacht ist, aber das ist ein wenig zu kurz gedacht.

13 Stimmen

Ihr Zitat "L2S funktioniert nur mit SQL Server (soweit ich weiß)" muss aktualisiert werden: das Open-Source-Projekt "dblinq" ersetzt die LINQ to SQL-Assembly durch eine, die mit MySQL, PostgreSQL, Ingres, Firebird, SQLite ... und Microsoft SQL (natürlich) kommunizieren kann.

1 Stimmen

Moment ... EF erstellt also keine eng gekoppelten DL-Objekte?

7 Stimmen

Ja, die ursprüngliche Prämisse, dass L2S keine unternehmensfähige Lösung ist, stimmt nicht mehr. Ich meine, StackOverflow läuft auf L2S und eine Reihe von anderen .coms wie Redbox und viele mehr.

88voto

Ryszard Dżegan Punkte 22810

LINQ to SQL

  1. Homogene Datenquelle: SQL-Server
  2. Nur für kleine Projekte empfohlen, bei denen die Datenstruktur gut konzipiert ist
  3. Mapping kann ohne Neukompilierung mit SqlMetal.exe geändert werden
  4. .dbml (Datenbank-Auszeichnungssprache)
  5. Eins-zu-eins-Zuordnung zwischen Tabellen und Klassen
  6. Unterstützt TPH Vererbung
  7. Unterstützt keine komplexen Typen
  8. Vorrangiger Speicheransatz
  9. Datenbankzentrierte Sicht auf eine Datenbank
  10. Erstellt vom C#-Team
  11. Unterstützt, aber keine weiteren Verbesserungen vorgesehen

Entity Framework

  1. Datenquelle Heterogeneus: Unterstützung vieler Datenanbieter
  2. Empfohlen für alle neuen Projekte außer:
    • Kleinere (LINQ to SQL)
    • wenn die Datenquelle eine flache Datei ist (ADO.NET)
  3. Mapping kann ohne Neukompilierung geändert werden, wenn Modell- und Mappingdateien gesetzt werden Metadaten-Artefakt-Prozess auf Kopieren in Ausgabeverzeichnis
  4. .edmx (Entity Data Model), das Folgendes enthält:
    • SSDL (Speicherschema-Definitionssprache)
    • CSDL (Konzeptuelle Schema-Definitionssprache)
    • MSL (Mapping Specification Language)
  5. Eins-zu-eins, eins-zu-viele, viele-zu-eins-Zuordnungen zwischen Tabellen und Klassen
  6. Unterstützt die 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. Anwendungszentrierte Sicht auf eine Datenbank
  10. Erstellt vom SQL Server-Team
  11. Die Zukunft der Microsoft-Daten-APIs

Siehe auch:

7 Stimmen

Dies ist die aktuellste und ausführlichste Antwort.

3 Stimmen

Hat Entity Framework nicht verwenden. LINQ to SQL, wenn Sie zum Beispiel eine dbSet<Orders>.Where()...ToList() ? Ich denke, es ist irreführend, Entity Framework im Gegensatz zu LINQ to SQL zu haben.

5 Stimmen

@mmcrae EF tut es nicht verwenden. L2S, beide sind Linq-Provider für die zugrunde liegenden Datenbanken. Wenn Sie es als Linq-to-a-database interpretieren, ähnlich wie linq-to-objects und linq-to-xml, dann ja, beide sind ähnlich in linq-to-a-database. Aber nein, EF benutzt nicht L2S (oder umgekehrt). Zwei völlig getrennte Werkzeuge.

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