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

时间:2010-07-28 23:01:21

标签: c# entity-framework strongly-typed-dataset

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

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

EF会建立一个类似的查询:

select * from Customers where Name = 'John smith'

但是对于Typed数据集,你可以写:

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

这是非常相似但不同之处在于第一次运行:

select * from Customers

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

这是对的吗?

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

这是正确的。实体框架是一个对象关系映射器(ORM)。它提供了一种将对象映射到关系数据以进行查询的方法。 IQueryable<T>与EF一起使用,基本上可以优化发送到服务器和从服务器发送的SQL。

答案 2 :(得分:1)

不,这不对。使用类型化数据集,您可以向tableadapter添加参数查询,例如'SELECT * from Customers where name = @name' 您将在运行时从代码中提供name参数。这样,您只需将所需数据提取到数据集中。按照Reed的回复首先拉出整个表格,效率极低,而且对于任何大小的数据库都不太现实。 这似乎是对ADO.Net的一种常见误解,即使在某些书籍中也是如此 - 特别是关于实体框架的书籍!