2010-07-28 7 views
6

Ich vergleiche die EF und typisierten Datensätze für ihre Nützlichkeit. Ich konnte nicht erkennen, warum Sie die EF über typisierte Datasets verwenden würden, wenn die EF nur an SQL Server gebunden ist. Aber ist es wahr, dass die Linq Aussagen in EF sind spät in der Hinsicht bewertet, dass, wenn Sie tat so etwas wie:Kann jemand bitte den Hauptunterschied zwischen Entity Framework und typisierten Datasets klären?

db.Customers.where(c => c.Name == "John Smith") 

Das EF würde aufbauen eine Abfrage wie:

select * from Customers where Name = 'John smith' 

aber mit typisierten Datensätzen Sie könnten schreiben:

bll.GetCustomers().where(c => c.Name == "John Smith") 

, die sehr ähnlich ist, aber der Unterschied ist es zuerst läuft:

select * from Customers 

Und dann die Verwendung der Sammlung der Standardsammlungen findet die Zeilen, die den Namen enthalten: "John Smith". In der Theorie wird die EF effizienter sein.

Ist das korrekt?

+0

Gute einfache Frage, die einen Punkt darstellt, der nicht sofort offensichtlich sein kann. –

+0

EF - Gute, typisierte Datasets - Blaaaaah. – zmbq

Antwort

4

Ja. Mit Entity Framework verwendet es IQueryable<T>, um Ihre Abfragen zu erstellen. Dadurch:

var results = db.Customers.Where(c => c.Name == "John Smith"); 

Intern werden die Ergebnisse sein IQueryable<Customer> (oder Ihr Typ). Dies ermöglicht dem Provider (EF) zu optimieren, wie dies intern ausgeführt wird. Im Fall von SQL Server wird die SQL-WHERE-Klausel der tatsächlichen Abfrage, die an den Server gesendet wird, bereits vorhanden sein, was wiederum bedeutet, dass Sie nur einen einzelnen Datensatz (wenn "Name" eindeutig ist) nur von der DB zurückgeben von jedem Datensatz.

Mit typisierten Datasets geben Sie jeden Datensatz zurück und durchsuchen anschließend die Ergebnisse nach dem entsprechenden Namen. Dies ist möglicherweise viel weniger effizient.

+0

Großartig, das war genau die Antwort, nach der ich gesucht habe :) Nun, um herauszufinden, ob ich die EF als meine Datenzugriffsschicht verwende oder sie mit einer anderen Ebene darüber abstrahiere ... Ich mag die Idee von Verwenden von Linq in meiner Business-Logik-Ebene. (Aber das ist wahrscheinlich eine Frage für später) Danke! –

2

Das ist richtig. Entity Framework ist ein Object-Relational Mapper (ORM). Es bietet eine Möglichkeit, Ihre Objekte relationalen Daten für die Abfrage zuzuordnen. IQueryable<T> wird mit EF verwendet und kann grundsätzlich die SQL optimieren, die zum und vom Server gesendet wird.

1

Nein, es ist nicht korrekt. Unter Verwendung typisierter Datasets würden Sie dem Tableadapter eine Parameterabfrage hinzufügen, z. B. 'SELECT * von Kunden, wobei name = @name' Sie würden den Namensparameter aus Ihrem Code zur Laufzeit liefern. Auf diese Weise würden Sie nur die gewünschten Daten in den Datensatz ziehen. Das Ziehen der gesamten Tabelle als erstes nach Reeds Antwort wäre im besten Fall äußerst ineffizient und bei einer Datenbank jeder Größe nicht realistisch. Dies scheint ein häufiges Missverständnis von ADO.Net zu sein, das sogar in einigen Büchern verewigt wird - besonders Bücher über Entity Framework!

Verwandte Themen