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.

16voto

Banford Punkte 2481

Ich habe festgestellt, dass ich bei der Verwendung von EF nicht mehrere Datenbanken innerhalb desselben Datenbankmodells verwenden kann. Aber in linq2sql konnte ich das, indem ich den Schemanamen die Datenbanknamen vorangestellt habe.

Dies war einer der Gründe, warum ich ursprünglich mit linq2sql zu arbeiten begann. Ich weiß nicht, ob EF diese Funktionalität bereits zulässt, aber ich erinnere mich, gelesen zu haben, dass dies nicht vorgesehen war.

13voto

vintana Punkte 2893

Wenn Ihre Datenbank überschaubar und einfach ist, ist LINQ to SQL ausreichend. Wenn Sie logische/abstrakte Entitäten zusätzlich zu Ihren Tabellen benötigen, sollten Sie sich für Entity Framework entscheiden.

4 Stimmen

Entity Framework ermöglicht eine Abstraktionsschicht über der Datenbank. Das Problem vieler OR-Mapper besteht meiner Meinung nach darin, dass sie eine 1:1-Abbildung zwischen Tabellen und Klassen bieten. Das Datenbankmodell spiegelt nicht immer die Art und Weise wider, wie wir es in Bezug auf ein Geschäftsmodell betrachten.

0 Stimmen

Der Platz reichte nicht mehr aus. Wie auch immer, basierend auf dem, was ich oben gesagt habe, würde ich behaupten, dass Ihre Antwort nicht vollständig ist.

7 Stimmen

Ich halte das für einen wirklich schlechten Ratschlag. L2S ist gut trotzdem der Einfachheit oder Komplexität Ihrer Datenbank. Die eigentliche Falle besteht darin, dass keine angemessene Trennung der Belange vorgenommen wird. Wenn Sie versuchen, Ihre Geschäftsschicht und Ihre Datenzugriffsschicht zu verschmelzen und Ihre Linqed-up-Objekte für alles zu verwenden, dann werden Sie L2S als einschränkend empfinden. Aber das ist ein Problem mit einem allzu einfachen und monolithischen Design. L2S ist eine großartige DAL, und wenn Sie Abfragen und Persistenz als eine von Ihren Geschäftsregeln getrennte Angelegenheit betrachten, werden Sie sich auf lange Sicht eine Menge Ärger in vielen Bereichen ersparen.

9voto

John Dunagan Punkte 1415

Beide unterstützen noch nicht die einzigartigen SQL 2008-Datentypen. Der Unterschied aus meiner Sicht ist, dass Entity immer noch die Chance hat, in einer zukünftigen Version ein Modell um meinen geografischen Datentyp herum zu konstruieren, und Linq to SQL, das aufgegeben wurde, wird dies nie tun.

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

4 Stimmen

SQL Server 2008 Geodatentypen (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/de-us/data/dn194325 .

8voto

Ramon de Klein Punkte 4604

Ich arbeite für einen Kunden, der ein großes Projekt hat, das Linq-to-SQL verwendet. Als das Projekt begann, war es die offensichtliche Wahl, weil Entity Framework zu diesem Zeitpunkt einige wichtige Funktionen fehlten 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 für hoch skalierbare Dienste sehr gut ist. Wir haben manchmal 100+ Anfragen pro Sekunde und obwohl wir unsere Datenbanken optimiert haben, dauern die meisten Abfragen immer noch mehrere Millisekunden. Aufgrund der synchronen Datenbankaufrufe ist der Thread blockiert und steht nicht für andere Anfragen zur Verfügung.

Wir denken darüber nach, auf Entity Framework umzusteigen, allein für diese Funktion. Es ist eine Schande, dass Microsoft die asynchrone Unterstützung nicht in Linq-to-SQL implementiert hat (oder als Open-Source zur Verfügung gestellt hat, damit die Community dies tun kann).

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

Es gibt auch einige andere Optionen, die in Betracht gezogen werden können, wie zum Beispiel LLBLGen . Es ist eine ausgereifte ORM-Lösung, die schon lange existiert und sich als zukunftssicherer erwiesen hat als die MS-Datenlösungen (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).

7voto

MRFerocius Punkte 5399

Ich denke, wenn Sie etwas schnell entwickeln müssen, ohne Strange-Dinge in der Mitte, und Sie brauchen die Möglichkeit, Entitäten haben, die Ihre Tabellen:

Linq2Sql kann ein guter Verbündeter sein, der mit LinQ ein großartiges Entwicklungs-Timing entfesselt.

5 Stimmen

"keine seltsamen Dinge in der Mitte", ok was meinen SIE damit. Beispiel für ein "seltsames Ding in der Mitte"

1 Stimmen

Es wäre nett, diese Antwort zu bearbeiten oder zu löschen, da sie für die moderne Entwicklung nicht mehr nützlich ist und die Leute auf eine falsche Fährte führen kann.

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