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.

54voto

Jiyosub Punkte 1190

Meine Erfahrungen mit Entity Framework waren weniger als glänzend. Erstens müssen Sie von den EF-Basisklassen erben, also verabschieden Sie sich von den POCOs. Ihr Design muss sich um das EF herum bewegen. 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 Workarounds, um POCOs und Lazy Loading zu verwenden, aber die gibt es IMHO nur, weil EF noch nicht so weit ist. Ich plane, nach 4.0 darauf zurückzukommen.

8 Stimmen

Die fehlende POCO-Unterstützung ist der Hauptgrund, warum ich LINQ to SQL dem Entity Framework vorgezogen habe. Vielleicht überdenke ich EF noch einmal, wenn sie es in die nächste Version einbauen, wie sie es versprechen. Es gibt einige zusätzliche Projekte, die POCOs für EF anbieten, aber nicht sauber genug.

29 Stimmen

Für den Fall, dass jemand (wie ich) nicht weiß, wofür POCO steht: Einfaches altes CLR-Objekt

5 Stimmen

Ich verstehe wirklich nicht, was die große Aufregung über die Nichtunterstützung von POCOs soll... es ist eine weitere Abstraktionsebene, Leute. Erstellen Sie eine Fabrik, die das Daten-Repository injiziert und konstruieren Sie dort Ihre POCOs. Es ist wahrscheinlich sowieso eine gute Idee.

47voto

Nawaz Punkte 339767

Ich habe eine sehr gute Antwort gefunden aquí die in einfachen Worten erklärt, wann was zu verwenden ist:

Die grundlegende Faustregel für die Wahl des Rahmens ist die Planung von Daten in Ihrer Präsentationsschicht zu bearbeiten.

  • Linq-To-Sql - diesen Rahmen verwenden, wenn Sie eine Eins-zu-eins-Bearbeitung planen Beziehung Ihrer Daten in Ihrer Präsentationsschicht zu bearbeiten. Das heißt, Sie nicht vorhaben, Daten aus mehr als einer Tabelle in einer Ansicht oder Seite zu kombinieren oder Seite zu kombinieren.

  • Entity Framework - verwenden Sie diesen Rahmen, wenn Sie vorhaben Daten aus mehr als einer Tabelle in Ihrer Ansicht oder Seite zu kombinieren. Um die sind die oben genannten Begriffe spezifisch für Daten, die in Ihrer die in Ihrem View oder auf Ihrer Seite bearbeitet und nicht nur angezeigt werden. Dies ist wichtig zu verstehen.

Mit dem Entity Framework können Sie Tabellendaten "zusammenführen". um sie der Präsentationsschicht in einer bearbeitbaren Form zu präsentieren, und dann Wenn dieses Formular übermittelt wird, weiß EF, wie ALLE Daten aus den verschiedenen Tabellen zu aktualisieren.

Es gibt wahrscheinlich genauere Gründe, EF dem L2S vorzuziehen, aber aber dies ist wahrscheinlich der am einfachsten zu verstehende Grund. L2S hat nicht die Möglichkeit, Daten für die Ansichtsdarstellung zusammenzuführen.

0 Stimmen

Seriöse Quelle, aber eindeutig nicht gut informiert, selbst wenn man den Zeitpunkt der Erstellung berücksichtigt.

37voto

terjetyl Punkte 9247

Mein Eindruck ist, dass Ihre Datenbank ziemlich groß oder sehr schlecht konzipiert ist, wenn Linq2Sql nicht Ihren Bedürfnissen entspricht. Ich habe etwa 10 Websites, sowohl größere als auch kleinere, die alle Linq2Sql verwenden. Ich habe mir viele Male Entity Framework angesehen, aber ich kann keinen guten Grund finden, es Linq2Sql vorzuziehen. Das heißt, ich versuche, meine Datenbanken als Modell zu verwenden, so dass ich bereits eine 1:1-Abbildung zwischen Modell und Datenbank habe.

Bei meiner derzeitigen Tätigkeit haben wir eine Datenbank mit über 200 Tabellen. Eine alte Datenbank mit vielen schlechten Lösungen, so dass ich den Vorteil von Entity Framework gegenüber Linq2Sql sehen könnte, aber ich würde es trotzdem vorziehen, die Datenbank neu zu entwerfen, da die Datenbank der Motor der Anwendung ist und wenn die Datenbank schlecht entworfen und langsam ist, dann wird meine Anwendung auch langsam sein. Die Verwendung von Entity Framework auf einer solchen Datenbank scheint ein Quickfix zu sein, um das schlechte Modell zu verschleiern, aber es könnte niemals die schlechte Leistung verschleiern, die man von einer solchen Datenbank erhält.

2 Stimmen

Sie übersehen den Punkt - sogar mit kleinen Datenbanken, können Sie etwas anderes als eine 1:1-Beziehung zwischen Datenbanktabellen und Code/Domänenobjekten wünschen. Es hängt einfach davon ab, wie viel Abstraktion Sie in den Bus-/Domänenobjekten wünschen.

18 Stimmen

Das habe ich erkannt :) Heute kodiere ich meine Geschäftseinheiten gerne von Hand. Ich benutze immer noch Linq2sql, aber nur innerhalb meiner Repositories, wo ich Daten mit Linq2sql erhalte und die Linq2sql-Entitäten in meine benutzerdefinierten Geschäftsentitäten konvertiere. Das ist vielleicht ein bisschen mehr Arbeit als mit einem OR-Mapper, aber ich möchte meine Geschäftsschicht frei von OR-Mapper-spezifischem Code halten.

27voto

3 Stimmen

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.

2 Stimmen

Außerdem kann Linq to SQL eine DB aus den Modellklassen problemlos auffüllen. Ich bin nicht sicher, ob es auch die DB selbst generieren kann, aber das Generieren des Schemas und der Tabellen gehört zu den Möglichkeiten von Linq to SQL.

2 Stimmen

Danke für die Antwort, ich denke, man kann die sqlmetal.exe docs.microsoft.com/de-us/dotnet/framework/tools/ um Code/Zuordnung aus der Datenbank zu generieren, wenn Sie Linq to SQL

24voto

saille Punkte 8687

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:

Zur Verfügung gestellt von Microsoft:

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

Über Drittanbieter:

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

um nur einige zu nennen.

Dies macht EF zu einer leistungsstarken Programmierabstraktion über Ihren relationalen Datenspeicher, d. h. Entwickler können unabhängig vom zugrunde liegenden Datenspeicher mit einem einheitlichen Programmiermodell arbeiten. Dies kann sehr nützlich sein, wenn Sie ein Produkt entwickeln, bei dem Sie sicherstellen wollen, dass es mit einer breiten Palette gängiger RDBMS zusammenarbeitet.

Eine andere Situation, in der diese Abstraktion nützlich ist, ist die, in der Sie Teil eines Entwicklungsteams sind, das mit einer Reihe verschiedener Kunden oder verschiedener Geschäftseinheiten innerhalb einer Organisation arbeitet, und Sie die Produktivität der Entwickler verbessern wollen, indem Sie die Anzahl der RDBMS reduzieren, mit denen sie sich vertraut machen müssen, um eine Reihe verschiedener Anwendungen auf verschiedenen RDBMS zu unterstützen.

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