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?
.net
entity-framework
linq-to-sql
Chris Roberts
quelle
quelle
Antworten:
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
quelle
Ich denke, die schnelle und schmutzige Antwort lautet:
quelle
Ist LINQ to SQL wirklich tot? von Jonathan Allen für InfoQ.com
quelle
Es gibt eine Reihe offensichtlicher Unterschiede in diesem Artikel, den @lars veröffentlicht hat, aber die kurze Antwort lautet:
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.
quelle
LINQ zu SQL
Entity Framework
Siehe auch:
quelle
dbSet<Orders>.Where()...ToList()
? Ich finde es irreführend, wenn sich Entity Framework von LINQ zu SQL widersetzt.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
quelle
Ich habe hier eine sehr gute Antwort gefunden, die erklärt, wann man was in einfachen Worten verwendet:
quelle
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.
quelle
Einen guten Vergleich finden Sie hier:
http://www.dotnet-tricks.com/Tutorial/entityframework/1M5W300314-Differenz- zwischen-LINQ-to-SQL-and-Entity-Framework.html
http://www.c-sharpcorner.com/blogs/entity-framework-vs-linq-to-sql1
quelle
sqlmetal.exe
docs.microsoft.com/en-us/dotnet/framework/tools/… verwenden , um Code / Mapping aus der Datenbank zu generieren, wenn manLinq to SQL
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:
Über Drittanbieter:
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.
quelle
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.
quelle
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.
quelle
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 ...
quelle
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.
quelle
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).
quelle
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.
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
quelle