Frage

Nun das .NET v3.5 SP1 veröffentlicht wurde (zusammen mit VS2008 SP1), haben wir nun Zugang zu den .NET entity framework.

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

Die Art, wie ich es verstehe, ist das Entity Framework (wenn verwendet mit LINQ to Entities) ist eine "große Bruder" von LINQ to SQL?Wenn dies der Fall ist - welche Vorteile hat es?Was können Sie tun, dass LINQ to SQL nicht tun können, auf Ihre eigenen?

War es hilfreich?

Lösung

LINQ to SQL unterstützt nur 1-zu-1-Zuordnung von Datenbank-Tabellen, views, sprocs und Funktionen zur Verfügung, die in Microsoft SQL Server.Es ist eine großartige API für schnelle Daten Zugang-Konstruktion relativ gut entworfene SQL Server-Datenbanken.LINQ2SQL zuerst veröffentlicht wurde mit C# 3.0 und .Net Framework 3.5.

LINQ to Entities (ADO.Net Entity Framework) ist ein ORM (Object Relational Mapper) - API, die ermöglicht für eine Breite definition von Objekt-domain-Modelle und Ihre Beziehungen zu den vielen verschiedenen ADO.Net data Provider.Als solche können Sie mix und match eine Reihe von verschiedenen Datenbank-Anbietern, application Server oder Protokolle zu entwerfen, ein zusammengesetztes mash-up von Objekten, die aufgebaut sind aus einer Vielzahl von Tabellen, Quellen, Dienstleistungen, etc.ADO.Net Framework veröffentlicht, mit der .Net Framework 3.5 SP1.

Dies ist eine gute einführende Artikel auf der MSDN-Website:Einführung in LINQ zu Relationalen Daten

Andere Tipps

Ich denke, die schnelle und schmutzige Antwort ist, dass

  • LINQ to SQL ist der schnelle und einfache Weg, es zu tun.Dies bedeutet, dass Sie bekommen, geht schneller, und liefern schneller, wenn Sie an etwas arbeiten, was kleiner ist.
  • Entity Framework ist der all-out, no-holds-barred Weg, es zu tun.Das heißt, Sie wird nehmen mehr Zeit, up-front, entwickeln sich langsamer und haben mehr Flexibilität, wenn Sie an etwas arbeiten, das größer ist.

Ist LINQ to SQL Wirklich Tot? von Jonathan Allen InfoQ.com

Matt Warren beschreibt [LINQ to SQL] als etwas, "war noch nie soll zu existieren." Im wesentlichen, es war einfach sein soll, stand-in, um zu helfen Sie entwickeln LINQ, bis die richtige ORM bereit war.

...

Die Skala von Entity Framework verursacht es zu verpassen .NET 3.5/Visual Studio 2008-Frist.Es wurde Zeit für die leider den Namen ".NET 3.5 Service Pack 1", der mehr nach einem major-release als ein service pack.

...

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

...

als der .NET 4.0, LINQ to Entities werden die empfohlenen data access-Lösung für LINQ to relationalen Szenarien.

Es gibt eine Reihe von offensichtlichen Unterschiede skizziert in diesem Artikel @lars gepostet, aber die kurze Antwort ist:

  • L2S ist eng gekoppelt - Objekt-Eigenschaft zu bestimmten Feld der Datenbank oder mehr ordnungsgemäß Objekt Zuordnung zu einer bestimmten Datenbank-schema
  • L2S funktioniert nur mit SQL Server (soweit ich weiß)
  • EF ermöglicht die Zuordnung einer Klasse zu mehreren Tabellen
  • EF Griff M-M-Beziehungen
  • EF wird die Möglichkeit haben, zu jedem Ziel ADO.NET data provider

Die ursprüngliche Prämisse war L2S ist für die Schnelle Entwicklung und das EF für mehr "enterprisey" n-tier-Anwendungen, aber, dass ist der Verkauf von L2S ein wenig zu kurz.

LINQ to SQL

  1. Homogene Datenquelle:SQL Server
  2. Empfohlen für kleine Projekte, die nur dort, wo Daten-Struktur ist gut entwickelt,
  3. Die Zuordnung kann geändert werden, ohne recompilling mit SqlMetal.exe
  4. .dbml (Database Markup Language)
  5. Eins-zu-eins-Zuordnung zwischen den Tabellen und Klassen
  6. Unterstützt TPH Vererbung
  7. Keine Unterstützung für komplexe Typen
  8. Storage-first-Ansatz
  9. Datenbank-zentrierte Sicht einer Datenbank
  10. Erstellt von C# - team
  11. Unterstützt, nicht aber weitere Verbesserungen vorgesehen

Entity Framework

  1. Heterogeneus datasource: Unterstützung viele Daten-Anbieter
  2. Empfohlen für alle neuen Projekte, Ausnahme:
    • kleine (LINQ to SQL)
    • wenn die Datenquelle ist eine flache Datei (ADO.NET)
  3. Die Zuordnung kann geändert werden, ohne recompilling bei der Einstellung Modell-und mapping-Dateien Metadaten Artefakt Kopieren, Um die Ausgabe-Verzeichnis
  4. .edmx (Entity Data Model), die 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 inheritence:
    • TPH (Tabelle Pro Hierarchie)
    • TPT (Tabelle Pro Typ)
    • TPC (Tabelle Pro Konkrete Klasse)
  7. Unterstützt komplexe Typen
  8. Code-first, Model-first -, Speicher-erste Ansätze
  9. Application-centric view of a database
  10. Erstellt von SQL Server-team
  11. Zukunft der Microsoft-Daten-APIs

Siehe auch:

Meine Erfahrung mit Entity Framework ist weniger als stellare.Zuerst müssen Sie die Vererbung von der EF-Basisklassen, so sagen Sie good bye, um POCOs.Ihr design haben, um die EF.Mit LinqtoSQL könnte ich mit meinem bestehenden business-Objekte.Zusätzlich, es ist kein lazy loading, Sie zu implementieren, dass Sie sich.Es gibt einige Problemumgehungen Arbeit draußen zu verwenden POCOs und lazy loading, aber es gibt Sie IMHO, weil EF ist nicht noch bereit.Ich Plane wieder zu kommen, um es nach dem 4.0

Ich fand eine sehr gute Antwort hier was erklärt, wenn zu verwenden, was in einfachen Worten:

Die Faustregel für das framework zu verwenden ist, wie zu planen Bearbeiten von Daten in Ihrer Präsentation.

  • Linq-To-Sql - verwenden Sie diesen Rahmen, wenn Sie planen, die Bearbeitung eines one-to-one Beziehung von Daten in Ihrer Präsentation.Bedeutung Sie planen Sie nicht auf die Kombination von Daten aus mehr als einer Tabelle in einer Ansicht oder die Seite.

  • Entity Framework - verwenden Sie diesen Rahmen, wenn Sie planen, die Kombination von Daten aus mehr als einer Tabelle in der Ansicht oder Seite.Machen dies klarer, die oben genannten Bedingungen sind spezifisch für die Daten manipuliert in Ihren anzeigen oder auf einer Seite gerade nicht angezeigt werden.Dies ist wichtig zu verstehen.

Mit Entity Framework können Sie "merge" vorgelegt Daten zusammen der presentation layer in eine Bearbeitbare form, und dann wenn das Formular gesendet wird, EF wissen, wie zu update ALLE die Daten aus den verschiedenen Tabellen.

Es gibt wahrscheinlich mehr genaue Gründe für die Wahl von EF über L2S, aber das wäre wahrscheinlich die einfachste zu verstehen.L2S nicht über die Funktion zum Zusammenführen von Daten für view-Präsentation.

Mein Eindruck ist, dass Ihre Datenbank ist ziemlich enorm oder sehr schlecht entwickelt, wenn Linq2Sql nicht fit Ihre Bedürfnisse.Ich habe rund 10 websites, die sowohl größeren als auch kleineren alle mit Linq2Sql.Ich habe geschaut und Entity framework viele Male, aber ich kann nicht finden, einen guten Grund für die Verwendung über Linq2Sql.Das sagte ich versuchen, meine Datenbanken als Modell, so dass ich bereits eine 1-zu-1-Zuordnung zwischen Modell und Datenbank.

Bei meinem aktuellen job haben wir eine Datenbank mit 200+ Tabellen.Eine alte Datenbank mit viele schlechte Lösungen gibt es also konnte ich sehen den Vorteil von Entity Framework gegenüber Linq2Sql aber trotzdem würde ich lieber eine Neugestaltung der Datenbank, denn die Datenbank ist der Motor für die Anwendung und die Datenbank ist schlecht entwickelt, und langsam, dann meine Anwendung wird auch langsam sein.Mit Entity framework auf eine solche Datenbank scheint wie ein quickfix, um zu verschleiern, die schlechtes Modell, aber es konnte nie Verkleidung der schlechten Leistung, die Sie erhalten, aus einer solchen Datenbank.

Die Antworten hier haben abgedeckt viele der Unterschiede zwischen Linq2Sql und EF, aber es gibt einen wesentlichen Punkt, wurde nicht viel Aufmerksamkeit geschenkt:Linq2Sql unterstützt nur SQL-Server in der Erwägung, dass EF Provider der folgenden RDBMS ist:

Von Microsoft zur Verfügung:

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

Über Drittanbieter:

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

um ein paar zu nennen.

Das macht EF eine leistungsstarke Programmierung Abstraktion der relationalen datenspeicher, Bedeutung Entwicklern ein einheitliches Programmiermodell, mit zu arbeiten, unabhängig von der zugrunde liegenden datenspeicher.Dies könnte sehr hilfreich sein in Situationen, wo Sie sind, ein Produkt zu entwickeln, dass Sie sicherstellen möchten, wird die Interoperabilität mit eine Breite Palette von gemeinsamen RDBMS ist.

Eine andere situation, wo diese Abstraktion ist hilfreich ist, wo Sie sind Teil einer Entwicklung team arbeitet mit einer Reihe von verschiedene Kunden oder verschiedene Geschäftseinheiten innerhalb einer organisation, und Sie wollen zu verbessern die Produktivität von Entwicklern durch die Reduzierung der Anzahl von RDBMS, die Sie vertraut machen mit, um zu unterstützen, eine Reihe von verschiedenen Anwendungen auf verschiedenen RDBMS ist.

Ich fand, dass ich konnte nicht die Verwendung mehrerer Datenbanken in der gleichen Datenbank-Modell bei Verwendung von EF.Aber in linq2sql, ich könnte einfach durch voranstellen des schema-Namen mit dem Datenbank-Namen.

Dies war einer der Gründe, warum ich begann ursprünglich mit linq2sql.Ich weiß nicht, ob EF hat noch erlaubt, diese Funktionalität, aber ich erinnere mich gelesen zu haben, dass er gedacht war es nicht dies zu ermöglichen.

Wenn Ihre Datenbank ist unkompliziert und einfach, LINQ to SQL zu tun.Wenn Sie müssen logisch/abstrahierte Einheiten auf der Oberseite des Tabellen, dann gehen Sie für Entity Framework.

Weder noch fördert das einzigartige SQL 2008-Datentypen.Der Unterschied aus meiner Sicht ist, dass die Person noch eine chance hat, zu bauen ein Modell, um meinen geographischen Datentyp in einer zukünftigen Version, und Linq to SQL, aufgegeben wird, wird es nie.

Frage mich, was ist mit nHibernate oder OpenAccess...

Ich denke, wenn Sie entwickeln müssen, um etwas schnell mit keine Seltsamen Dinge in der Mitte, und Sie müssen die Möglichkeit haben Einrichtungen sein, die Ihre Tische:

Linq2Sql kann eine gute Verbündete, es mit LinQ entfesselt eine große Entwicklung-timing.

Ich arbeite für Kunden, die ein großes Projekt, das mit Linq-to-SQL.Wenn das Projekt gestartet, es war die offensichtliche Wahl, da Entity Framework war, fehlten einige wichtige Funktionen an, die Zeit und die Leistung von Linq-to-SQL wurde viel besser.

Jetzt EF entwickelt hat und Linq-to-SQL fehlt async-Unterstützung, das ist großartig für die hoch skalierbare services.Wir haben 100+ Anfragen pro Sekunde, und manchmal, obwohl wir bereits optimiert haben unseren Datenbanken, die meisten Abfragen noch einige Millisekunden abgeschlossen.Wegen der synchronen Datenbank-Aufrufe, wird der thread gesperrt und nicht für andere Anfragen.

Wir denken zu wechseln, Entity Framework, die ausschließlich für diese Funktion.Es ist eine Schande, dass Microsoft nicht umsetzen async-Unterstützung in Linq-to-SQL - (oder open-Source, so könnte die Gemeinschaft tun es).

Nachtrag Dezember 2018: Microsoft bewegt sich in Richtung .NET-Core-und Linq-2-SQL ist nicht Unterstützung auf .NET Core, so müssen Sie zu bewegen, um EF zu machen Sie sicher, dass Sie können migrieren, um EF.Core in die Zukunft.

Es gibt auch einige andere Optionen zu prüfen, wie LLBLGen.Es ist eine Reife ORM-Lösung, existiert bereits eine lange Zeit und hat sich bewährt, mehr Zukunft-Beweis dann die MS-Daten-Lösungen (ODBC, ADO, ADO.NET, Linq-2-SQL -, EF -, EF.Kern).

LINQ to SQL und Entity Framework ähnlich Aussehen wie auf der Oberfläche.Sie bieten beide LINQ-Abfragen gegen eine Datenbank mit dem Datenmodell.

LINQ to SQL-entwickelt von der LINQ-Projekts, die gekommen sind aus der Arbeit im team mit die Entwicklung der Sprache.Während Das Entity Framework war ein Projekt des Data Programmability team und konzentrierte sich auf die Entity SQL-Sprache.Microsoft hat relly nicht die Absicht, zu depricate LINQ to SQL.

LINQ to SQL ist immer noch die Teil ADO.NET beim Entity framework hat separate API.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 Ihre Daten speichern.Es ist das Entity Data Model, EDM, bietet die definition des konzeptionellen Schemas der Datenbank-schema-Informationen, die notwendig für die Interaktion mit der Datenbank, und schließlich ein Zuordnungsschema, die links zu den beiden.

Hier sind einige Aufgabe, die von Entity Framework(Entity data model).

• Generiert automatisch Klassen aus dem Modell und aktualisiert diese Klassen dynamisch zu jeder Zeit das Modell ändert.

• Kümmert sich um alle von der Datenbank-Konnektivität, so dass die Entwickler nicht belastet durch schreiben zu müssen viel code für die Interaktion mit der Datenbank.

• Bietet Allgemeine Abfrage-syntax für das Abfragen des Modells, nicht die Datenbank, und übersetzt dann diese Abfragen in Abfragen der Datenbank können verstehen.

• Bietet einen Mechanismus zum verfolgen von änderungen an dem Modell Objekte, wie Sie sind verwendet in den Anwendungen und verarbeitet die updates für die Datenbank.

Linq-to-SQL

Es ist der provider es unterstützt nur SQL-Server.Es ist ein mapping-Technologie zum anzeigen von SQL Server-Datenbank-Tabellen .NET-Objekte.Ist Microsofts Erster Versuch, ein ORM - Object-Relational-Mapper.

Linq-to-Entities

Ist die gleiche Idee, aber mit Entity Framework in den hintergrund, als der ORM - wieder von Microsoft, Es unterstützt mehrere Datenbank-Haupt-Vorteil von entity framework können Entwickler arbeiten an der Datenbank keine Notwendigkeit, die syntax zu erlernen, um einen Vorgang auf verschiedene Datenbanken

Nach meiner persönlichen Erfahrung ist Ef ist besser (wenn man keine Ahnung von SQL) Leistung in LINQ ist etwas schneller, da im Vergleich zu EF Grund LINQ Sprache geschrieben lambda.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top