有人可以澄清实体框架和类型化数据集之间的主要区别吗?

Jam*_*lse 6 c# entity-framework strongly-typed-dataset

我正在比较EF和类型化数据集的有用性.如果EF仅绑定到SQL Server,我无法理解为什么要使用EF over typed数据集.但是,如果你做了类似的事情,那么EF中的Linq语句是否真的被评估得很晚才是真的:

db.Customers.where(c => c.Name == "John Smith")
Run Code Online (Sandbox Code Playgroud)

EF会建立一个查询,如:

select * from Customers where Name = 'John smith'
Run Code Online (Sandbox Code Playgroud)

但是使用Typed数据集,你可以写:

bll.GetCustomers().where(c => c.Name == "John Smith")
Run Code Online (Sandbox Code Playgroud)

这是非常相似但不同的是它首先运行:

select * from Customers
Run Code Online (Sandbox Code Playgroud)

然后使用标准集合库查找包含名称的行:"John Smith".理论上意味着EF将更有效率.

它是否正确?

Ree*_*sey 4

是的。使用实体框架,它用于IQueryable<T>构建您的查询。通过做:

var results = db.Customers.Where(c => c.Name == "John Smith");
Run Code Online (Sandbox Code Playgroud)

在内部,结果将是IQueryable<Customer>(或您的类型)。这允许提供者 (EF) 优化其内部执行方式。对于 SQL Server,发送到服务器的实际查询将已经有 SQL WHERE 子句,这反过来意味着您只会从数据库返回一条记录(如果“Name”是唯一的)每条记录。

使用类型化数据集,您将返回每条记录,然后在结果中搜索适当的名称。这可能效率低得多。