Entity Framework vs LINQ to SQL


828

Nachdem .NET v3.5 SP1 (zusammen mit VS2008 SP1) veröffentlicht wurde, haben wir jetzt Zugriff auf das .NET-Entitätsframework.

Meine Frage ist dies. Was ist der Unterschied, wenn Sie versuchen, sich zwischen der Verwendung von Entity Framework und LINQ to SQL als ORM zu entscheiden?

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 dies der Fall ist - welche Vorteile hat es? Was kann LINQ to SQL nicht alleine?


138
Ich denke, dass die folgenden Antworten erneut überprüft werden sollten, da EF seit langer Zeit veröffentlicht wurde, damit neue Entwickler, die hierher kommen, den falschen Eindruck bekommen können. EF wurde seit seiner frühen Veröffentlichung zu einem großartigen und einfachen Tool. Sie haben gerade die Verbindung zur Datenbank hergestellt und es sind ungefähr 90% von allem, was Sie brauchen. Sehr schnelle Entwicklung aus erfahrener Sicht! Von dort aus ist LINQ dein bester Freund. Es ist hochgradig anpassbar, MVC liebt es einfach und für die Leute, die sagen, dass es schlecht ist - lernen Sie zuerst, wie man es benutzt (und halten Sie sich auch an LINQ)!
Graumanoz

10
Nur damit klar ist - es ist nicht so, als hätten Sie jetzt die Wahl -, hat MSFT LINQ2SQL effektiv zugunsten von EF getötet. Die Tatsache, dass MSFT Open-Source-EF dazu beigetragen hat, weniger zu saugen und wird definitiv besser. Aber für alle, die in EF einsteigen - stellen Sie sicher, dass es in EF immer noch viele Macken gibt. Ich habe ungefähr eins gepostet - stackoverflow.com/questions/305092/…
nikib3ro

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

9
@ user3308043, [Zitieren erforderlich].
Ryan Lundy

3
@Kyralessa - Ab 2010 (mit der Veröffentlichung von .NET4.0, dem neuesten Zitat, das ich finden konnte) gab MS zu, dass zwar einige Investitionen in LINQ2SQL getätigt werden können, "der Großteil unserer Gesamtinvestition jedoch in das Unternehmen fließen wird Rahmen."
kmote

Antworten:


483

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

LINQ to Entities (ADO.Net Entity Framework) ist eine ORM-API (Object Relational Mapper), die eine umfassende Definition von Objektdomänenmodellen und deren Beziehungen zu vielen verschiedenen ADO.Net-Datenanbietern ermöglicht. Auf diese Weise können Sie eine Reihe verschiedener Datenbankanbieter, Anwendungsserver oder Protokolle kombinieren, um ein aggregiertes Mashup von Objekten zu entwerfen, die aus einer Vielzahl von Tabellen, Quellen, Diensten usw. erstellt wurden. ADO.Net Framework wurde mit veröffentlicht das .Net Framework 3.5 SP1.

Dies ist ein guter Einführungsartikel zu MSDN: Einführung von LINQ in relationale Daten


Es sieht so aus, als würden Sie LINQ to SQL verwenden, um in EF
PositiveGuy

11
@CoffeeAddict Obwohl sie mit LINQ Lambdas im Stil 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 oder zumindest nicht ab 2008 tat.
Kris

2
EF objektorientierter Ansatz machen es wirklich einfach und bequem zu bedienen, kann sehr schnell codiert, verwaltet werden. Für mich einfach der beste Weg, um auf Daten zuzugreifen.
Antoine Pelletier

10
Diese Antwort ist veraltet. Jetzt unterstützt Linq to SQL one2many Mapping
George Lanetz

201

Ich denke, die schnelle und schmutzige Antwort lautet:

  • LINQ to SQL ist der schnelle und einfache Weg, dies zu tun. Dies bedeutet, dass Sie schneller loslegen und schneller liefern, wenn Sie an etwas Kleinerem arbeiten.
  • Entity Framework ist die umfassende und uneingeschränkte Möglichkeit, dies zu tun. Dies bedeutet, dass Sie sich im Voraus mehr Zeit nehmen, sich langsamer entwickeln und mehr Flexibilität haben, wenn Sie an etwas Größerem arbeiten.

32
Sie werden auch dazu neigen, mit L2S weniger Codezeilen zu schreiben, um dasselbe zu erreichen wie mit EF. Kein verzögertes Laden in EF bedeutet, dass Sie immer überprüfen, ob etwas geladen wurde oder nicht.
Paul Mendoza

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

2
@ CoffeeAddict offensichtlich, die Top 3 der am häufigsten gewählten Antwort sagt L2S für einfache CRUD
IsmailS

11
@Banford Mit EF in .NET 4.0 denke ich, dass es besser ist als L2S. Die Funktionen, die in EF in 3.5 fehlten, dass L2S in .NET 4.0 zu EF hinzugefügt wurde. Ihre LINQ-Anweisungen, die jetzt in EF in .NET 4.0 enthalten sind, sehen fast genauso aus wie die in L2S. EF bietet Ihnen einige zusätzliche Dinge, die Sie jetzt zusätzlich zu den L2S-Angeboten tun können.
Paul Mendoza

40
Diese Antwort ist jetzt 5 Jahre alt und ziemlich veraltet. Entity Framework 6 ist jetzt in der Beta und ist stark verbessert, einschließlich Lazy Loading, Enum-Unterstützung usw. usw.
Tim

109

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 Wesentlichen sollte es nur ein Ersatz sein, um ihnen bei der Entwicklung von LINQ zu helfen, bis das echte ORM fertig war.

...

Aufgrund der Größe von Entity Framework wurde die Frist für .NET 3.5 / Visual Studio 2008 nicht eingehalten. Es wurde rechtzeitig für das leider als ".NET 3.5 Service Pack 1" bezeichnete Produkt fertiggestellt, das eher einer Hauptversion als einem Service Pack ähnelte.

...

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

...

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


56
Eigentlich mögen wir EF nicht, weil es einen so schlechten Designer hat und so extrem, extrem fehlerhaft ist. Ich habe es nie so komplex gefunden.
BlueRaja - Danny Pflughoeft

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

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

4
Ja, das Aufrufen von .ToString () für eine Ganzzahl-Eigenschaft in einer L2EF-Abfrage sollte keine Ausnahme verursachen.
StingyJack

3
@ BlueRaja-DannyPflughoeft Stimmt das nach mehr als 5 Jahren noch?
Vikas Rana

94

Es gibt eine Reihe offensichtlicher Unterschiede in diesem Artikel, den @lars veröffentlicht hat, aber die kurze Antwort lautet:

  • L2S ist eng gekoppelt - Objekteigenschaft an ein bestimmtes Datenbankfeld oder korrektere Objektzuordnung an ein bestimmtes Datenbankschema
  • L2S funktioniert nur mit SQL Server (soweit ich weiß)
  • Mit EF können Sie eine einzelne Klasse mehreren Tabellen zuordnen
  • EF kümmert sich um MM-Beziehungen
  • EF kann auf jeden ADO.NET-Datenanbieter abzielen

Die ursprüngliche Prämisse war, dass L2S für Rapid Development und EF für mehr "unternehmerische" n-Tier-Anwendungen ist, aber das verkauft L2S ein wenig zu kurz.


13
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 kommunizieren kann. .. und Microsoft SQL (natürlich).
Contango

1
Warten Sie ... damit EF keine eng gekoppelten DL-Objekte erstellt?
PositiveGuy

7
Ja, die ursprüngliche Annahme, dass L2S keine unternehmensfähige Lösung ist, ist nicht mehr wahr. Ich meine, StackOverflow läuft auf L2S und einer Reihe anderer .coms wie Redbox und vielen mehr.
PositiveGuy

74

LINQ zu SQL

  1. Homogene Datenquelle: SQL Server
  2. Empfohlen nur für kleine Projekte, bei denen die Datenstruktur gut gestaltet ist
  3. Die Zuordnung kann ohne erneutes Kompilieren mit SqlMetal.exe geändert werden
  4. .dbml (Datenbank-Markup-Sprache)
  5. Eins-zu-eins-Zuordnung zwischen Tabellen und Klassen
  6. Unterstützt die TPH- Vererbung
  7. Unterstützt keine komplexen Typen
  8. Storage-First-Ansatz
  9. Datenbankzentrierte Ansicht einer Datenbank
  10. Erstellt vom C # -Team
  11. Unterstützt, aber keine weiteren Verbesserungen beabsichtigt

Entity Framework

  1. Heterogeneus-Datenquelle: Unterstützt 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 ohne erneutes Kompilieren geändert werden, wenn Modell- und Zuordnungsdateien festgelegt werden. Metadatenartefaktprozess zum Kopieren in das Ausgabeverzeichnis
  4. .edmx (Entity Data Model), das Folgendes enthält:
    • SSDL (Storage Schema Definition Language)
    • CSDL (Conceptual Schema Definition Language)
    • 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- und Storage-first-Ansätze
  9. Anwendungszentrierte Ansicht einer Datenbank
  10. Erstellt vom SQL Server-Team
  11. Zukunft der Microsoft Data APIs

Siehe auch:


6
Dies ist die aktuellste und detaillierteste Antwort.
ErTR

2
Verwendet Entity Framework nicht LINQ to SQL, wenn Sie beispielsweise eine schreiben dbSet<Orders>.Where()...ToList()? Ich finde es irreführend, wenn sich Entity Framework von LINQ zu SQL widersetzt.
Don Cheadle

4
@mmcrae EF nicht verwenden L2S, sind beide Linq-Anbieter zu Grunde liegenden Datenbanken. Wenn Sie es als Linq-to-a-Datenbank interpretieren, ähnlich wie Linq-to-Objects und Linq-to-XML, dann sind beide in Linq-to-a-Datenbank ähnlich. Aber nein, EF verwendet kein L2S (oder umgekehrt). Zwei vollständig getrennte Werkzeuge.
Maarten

4
"Empfohlen für alle neuen Projekte außer ... kleinen" Ich bin anderer Meinung. Code First ist ein extrem schneller Weg, um mit kleinen Projekten Fuß zu fassen. Davon abgesehen ein großartiges Update für diese Frage.
DrewJordan

51

Meine Erfahrung mit Entity Framework war weniger als hervorragend. Zuerst müssen Sie von den EF-Basisklassen erben, also verabschieden Sie sich von POCOs. Ihr Design muss rund um die EF sein. Mit LinqtoSQL konnte ich meine vorhandenen Geschäftsobjekte verwenden. Außerdem gibt es kein verzögertes Laden, das müssen Sie selbst implementieren. Es gibt einige Umgehungsmöglichkeiten, um POCOs und verzögertes Laden zu verwenden, aber sie existieren meiner Meinung nach, weil EF noch nicht bereit ist. Ich habe vor, nach 4.0 darauf zurückzukommen


7
Mangelnde POCO-Unterstützung ist der Hauptgrund, warum ich LINQ to SQL anstelle des Entity Frameworks gewählt habe. Ich werde EF möglicherweise erneut besuchen, wenn sie es in die nächste Version aufnehmen, wie sie es versprechen. Es gibt einige zusätzliche Projekte, die POCOs für EF durchführen, aber nicht sauber genug.
Joseph Ferris

27
Falls jemand (wie ich) nicht weiß, wofür POCO steht: Plain Old CLR Object
CBono

4
Ich verstehe wirklich nicht, was die große Aufregung darüber ist, POCOs nicht zu unterstützen ... es ist eine weitere Ebene der Abstraktion, Leute. Erstellen Sie eine Factory, fügen Sie das Datenrepository ein und erstellen Sie dort Ihre POCOs. Es ist wahrscheinlich sowieso eine gute Idee.
EightyOne Unite

3
Ich höre, dass POCO in EF 4
PositiveGuy

8
POCO-Unterstützung ist heutzutage verfügbar und Vererbung ist für Entitätsklassen nicht mehr erforderlich. @CoffeeAddict POCO ist nur ein einfaches Objekt ohne Abhängigkeit von einem bestimmten Framework und ein wesentlicher Bestandteil moderner Entity-Framework-Muster
Chris McGrath,

46

Ich habe hier eine sehr gute Antwort gefunden, die erklärt, wann man was in einfachen Worten verwendet:

Als Faustregel für das zu verwendende Framework gilt, wie Sie Ihre Daten in Ihrer Präsentationsebene bearbeiten möchten.

  • Linq-To-Sql - Verwenden Sie dieses Framework, wenn Sie eine Eins-zu-Eins-Beziehung Ihrer Daten in Ihrer Präsentationsebene bearbeiten möchten . Das heißt, Sie planen nicht, Daten aus mehr als einer Tabelle in einer 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 zu verdeutlichen, beziehen sich die oben genannten Begriffe auf Daten, die in Ihrer Ansicht oder Seite bearbeitet und nicht nur angezeigt werden. Das ist wichtig zu verstehen.

Mit dem Entity Framework können Sie eingereichte Daten "zusammenführen", um sie der Präsentationsschicht in einem bearbeitbaren Formular zu präsentieren. Wenn dieses Formular gesendet wird, weiß EF, wie ALLE Daten aus den verschiedenen Tabellen aktualisiert werden.

Es gibt wahrscheinlich genauere Gründe, EF anstelle von L2S zu wählen, aber dies wäre wahrscheinlich der am einfachsten zu verstehende. L2S kann keine Daten für die Ansichtspräsentation zusammenführen.


36

Mein Eindruck ist, dass Ihre Datenbank ziemlich umfangreich oder sehr schlecht gestaltet ist, wenn Linq2Sql nicht Ihren Anforderungen entspricht. Ich habe ungefähr 10 größere und kleinere Websites, die alle Linq2Sql verwenden. Ich habe viele Male nach Entity Framework gesucht, aber ich kann keinen guten Grund finden, es über Linq2Sql zu verwenden. Trotzdem versuche ich, meine Datenbanken als Modell zu verwenden, damit ich bereits eine 1: 1-Zuordnung zwischen Modell und Datenbank habe.

In meinem aktuellen Job haben wir eine Datenbank mit mehr als 200 Tabellen. Eine alte Datenbank mit vielen schlechten Lösungen, sodass ich den Vorteil von Entity Framework gegenüber Linq2Sql sehen konnte, aber ich würde es dennoch vorziehen, die Datenbank neu zu gestalten, da die Datenbank die Engine der Anwendung ist und wenn die Datenbank schlecht entworfen und langsam ist, dann meine Anwendung wird auch langsam sein. Die Verwendung des Entity-Frameworks in einer solchen Datenbank scheint ein Quickfix zu sein, um das fehlerhafte Modell zu verschleiern, aber es könnte niemals die schlechte Leistung verschleiern, die Sie von einer solchen Datenbank erhalten.


1
Sie verpassen den Punkt - selbst bei kleinen Datenbanken möchten Sie möglicherweise etwas anderes als eine 1: 1-Beziehung zwischen Datenbanktabellen und Code- / Domänenobjekten. Hängt nur davon ab, wie viel Abstraktion Sie in den Bus- / Domänenobjekten wünschen.
Alchemie

18
Ich habe das erkannt :) Heute mag ich es, meine Geschäftseinheiten von Hand zu codieren. Ich verwende immer noch Linq2sql, aber nur in meinen Repositorys, in denen ich Daten mit Linq2sql erhalte und die linq2sql-Entitäten in meine benutzerdefinierten Geschäftsentitäten konvertiere. Vielleicht ein bisschen mehr Arbeit als die Verwendung eines Or-Mappers, aber trotzdem möchte ich meine Business-Schicht frei von OR-Mapper-spezifischem Code halten.
Terjetyl

25

2
Einige Dinge in der Antwort sind nicht korrekt. Ein EDMX ist nicht erforderlich, wenn Sie Code First verwenden. Und ich verstehe nicht, wie DI ins Spiel kommt, wenn Sie Code First verwenden.
Maarten

1
Außerdem kann Linq to SQL eine Datenbank aus den Modellklassen problemlos füllen. Ich bin nicht sicher, ob es auch die Datenbank selbst generieren kann, aber das Generieren des Schemas und der Tabellen fällt unter die Funktionen von Linq to SQL.
Tom Lint

Vielen Dank für die Antwort, ich denke, man kann sqlmetal.exe docs.microsoft.com/en-us/dotnet/framework/tools/… verwenden , um Code / Mapping aus der Datenbank zu generieren, wenn manLinq to SQL
Vinod Srivastav

23

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

Bereitgestellt 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 leistungsstarken Programmierabstraktion über Ihren relationalen Datenspeicher. Dies bedeutet, dass Entwickler unabhängig vom zugrunde liegenden Datenspeicher über ein konsistentes Programmiermodell verfügen, mit dem sie arbeiten können. Dies kann in Situationen sehr nützlich sein, in denen Sie ein Produkt entwickeln, von dem Sie sicherstellen möchten, dass es mit einer Vielzahl gängiger RDBMS zusammenarbeitet.

Eine andere Situation, in der diese Abstraktion nützlich ist, besteht darin, dass Sie Teil eines Entwicklungsteams sind, das mit einer Reihe verschiedener Kunden oder verschiedenen Geschäftseinheiten innerhalb eines Unternehmens zusammenarbeitet, und Sie möchten die Entwicklerproduktivität verbessern, indem Sie die Anzahl der RDBMS reduzieren, die sie werden müssen vertraut mit, um eine Reihe verschiedener Anwendungen zusätzlich zu verschiedenen RDBMS zu unterstützen.


15

Ich habe festgestellt, dass ich bei Verwendung von EF nicht mehrere Datenbanken innerhalb desselben Datenbankmodells verwenden konnte. Aber in linq2sql könnte ich den Schemanamen einfach Datenbanknamen voranstellen.

Dies war einer der Gründe, warum ich ursprünglich mit linq2sql angefangen habe. Ich weiß nicht, ob EF diese Funktionalität noch zugelassen hat, aber ich erinnere mich, dass ich gelesen habe, dass es beabsichtigt war, dies nicht zuzulassen.


12

Wenn Ihre Datenbank einfach und unkompliziert ist, reicht LINQ to SQL aus. Wenn Sie logische / abstrahierte Entitäten über Ihren Tabellen benötigen, wählen Sie Entity Framework.


4
Entity Framework ermöglicht eine Abstraktionsebene oben auf der Datenbank. Das Problem bei vielen OR-Mappern heute (meiner Meinung nach) ist, dass sie eine 1: 1-Zuordnung zwischen Tabellen und Klassen bieten. Das Datenbankmodell spiegelt nicht immer die Art und Weise wider, wie wir es als Geschäftsmodell betrachten.
Senfo

Kein Platz mehr. Wie auch immer, basierend auf dem, was ich oben gesagt habe, würde ich argumentieren, dass Ihre Antwort nicht vollständig ist.
Senfo

7
Ich denke, das ist wirklich ein schlechter Rat. L2S ist unabhängig von der Einfachheit oder Komplexität Ihrer Datenbank gut. Die eigentliche Falle besteht darin, dass die Bedenken nicht richtig getrennt werden. Wenn Sie versuchen, Ihre Geschäftsschicht und Ihre Datenzugriffsschicht zusammenzuführen und Ihre Linqed-up-Objekte für alles zu verwenden, werden Sie L2S-Einschränkungen feststellen. Aber das ist ein Problem mit einem zu simplen und monolithischen Design. L2S ist ein großartiger DAL, und wenn Sie das Abfragen und Beharren als ein von Ihren Geschäftsregeln getrenntes Problem betrachten, sparen Sie sich auf lange Sicht in vielen Bereichen viel Ärger.
Mattmc3

1
das sagt mir nichts. Was ist in Ihren Begriffen einfach?
PositiveGuy

1
und was meinst du als Beispiel für ein Bedürfnis nach "logisch / abstrahiert". Ja, ich weiß, was Abstraktion ist, aber bitte ein Beispiel in Ihrem Kontext ... um mir genau zu erklären, was Sie sagen ... beschreiben Sie es, geben Sie mir nicht nur allgemeinen Slang ... das ist alles relativ zum Sprichwort des Sprechers Diese Worte, also habe ich keine Ahnung, was DU damit meinst.
PositiveGuy

8

Weder unterstützt noch die eindeutigen SQL 2008-Datentypen. Der Unterschied aus meiner Sicht besteht darin, dass Entity in einer zukünftigen Version immer noch die Möglichkeit hat, ein Modell um meinen geografischen Datentyp herum zu erstellen, und Linq to SQL, das aufgegeben wird, wird dies niemals tun.

Ich frage mich, was mit nHibernate oder OpenAccess los ist ...


3
SQL Server 2008 Spatial-Datentypen (Open Geospatial Consortium OGS) werden ab Entity Framework 5 unterstützt. Andere Anbieter (Devart für Oracle) werden ebenfalls unterstützt. Siehe msdn.microsoft.com/en-us/data/dn194325 .
Subsci

6

Ich denke, wenn Sie etwas schnelles entwickeln müssen, ohne seltsame Dinge in der Mitte, und Sie die Möglichkeit benötigen, Entitäten zu haben, die Ihre Tabellen darstellen:

Linq2Sql kann ein guter Verbündeter sein, wenn man es mit LinQ verwendet, wird ein großartiges Entwicklungs-Timing freigesetzt.


4
"keine seltsamen Dinge in der Mitte", ok was meinst DU damit? Beispiel für eine "seltsame Sache in der Mitte"
PositiveGuy

Es wäre schön, diese Antwort zu bearbeiten oder zu löschen, sie ist für die moderne Entwicklung nicht mehr nützlich und kann Menschen auf den falschen Weg bringen.
Giulio Caccin

6

Ich arbeite für Kunden, die ein großes Projekt haben, das Linq-to-SQL verwendet. Als das Projekt begann, war es die offensichtliche Wahl, da Entity Framework zu diesem Zeitpunkt einige wichtige Funktionen fehlte und die Leistung von Linq-to-SQL viel besser war.

Jetzt hat sich EF weiterentwickelt und Linq-to-SQL fehlt die asynchrone Unterstützung, was sich hervorragend für hoch skalierbare Dienste eignet. Manchmal haben wir mehr als 100 Anfragen pro Sekunde und obwohl wir unsere Datenbanken optimiert haben, dauern die meisten Abfragen noch einige Millisekunden. Aufgrund der synchronen Datenbankaufrufe ist der Thread blockiert und für andere Anforderungen nicht verfügbar.

Wir denken darüber nach, ausschließlich für diese Funktion auf Entity Framework umzusteigen. Es ist eine Schande, dass Microsoft keine asynchrone Unterstützung in Linq-to-SQL implementiert hat (oder Open-Source-Unterstützung, damit die Community dies tun kann).

Nachtrag Dezember 2018: Microsoft wechselt zu .NET Core, und Linq-2-SQL wird in .NET Core nicht unterstützt. Sie müssen daher zu EF wechseln, um sicherzustellen, dass Sie in Zukunft auf EF.Core migrieren können.

Es sind auch einige andere Optionen zu berücksichtigen, z. B. LLBLGen . Es handelt sich um eine ausgereifte ORM-Lösung, die bereits seit langem existiert und sich als zukunftssicherer erwiesen hat als die MS-Datenlösungen (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).


2

Linq-to-SQL

Es ist ein Anbieter, der nur SQL Server unterstützt. Es ist eine Zuordnungstechnologie zum Zuordnen von SQL Server-Datenbanktabellen zu .NET-Objekten. Ist Microsofts erster Versuch eines ORM - Object-Relational Mapper.

Linq-to-Entities

Ist die gleiche Idee, aber mit Entity Framework im Hintergrund, wie das ORM - wieder von Microsoft. Es unterstützt mehrere Datenbanken. Der Hauptvorteil des Entity Frameworks besteht darin, dass Entwickler an jeder Datenbank arbeiten können, ohne die Syntax lernen zu müssen, um einen Vorgang für verschiedene Datenbanken auszuführen

Nach meiner persönlichen Erfahrung ist Ef besser (wenn Sie keine Ahnung von SQL haben), und die Leistung in LINQ ist etwas schneller als in LINQ-Sprache, die in Lambda geschrieben wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.