显示我的问题,我试图解释一个样本:实体框架性能VS传统ADO.Net
假设我有一个表UsersInfo
这些列:
Id, UserName, Password, FName, LName, Gender, Birthday,
HomeTel, Mobile, Fax, Email, LockStatus
现在我想选择LockStatus
从这张桌子。在传统模式下,我们取得这个查询并将其发送给SqlCommand
用于执行:
SELECT LockStatus FROM UsersInfo
今天在使用实体框架,我们使用这个来自查询:
var q = from r in new Data_DBEntities().UsersInfo
select new
{
r.LockStatus
};
实体SQL:
SELECT UsersInfo.LockStatus
FROM Data_DBEntities.UsersInfo
现在我启动应用程序并使用SQL Server Profiler跟踪它。如果我用的是第一种类型的查询(传统模式),我看到这样的结果:
SELECT LockStatus FROM UsersInfo
但是当我使用实体框架(LINQ ||实体SQL),在SQL Server探查表明,该结果:
SELECT
[Extent1].[LockStatus] AS [LockStatus]
FROM (SELECT
[UsersInfo].[Id] AS [Id],
[UsersInfo].[UserName] AS [UserName],
[UsersInfo].[Password] AS [Password],
[UsersInfo].[FName] AS [FName],
[UsersInfo].[LName] AS [LName],
[UsersInfo].[Gender] AS [Gender],
[UsersInfo].[Birthday] AS [Birthday],
[UsersInfo].[HomeTel] AS [HomeTel],
[UsersInfo].[Mobile] AS [Mobile],
[UsersInfo].[Fax] AS [Fax],
[UsersInfo].[Email] AS [Email],
[UsersInfo].[LockStatus] AS [LockStatus]
FROM [dbo].[UsersInfo] AS [UsersInfo]) AS [Extent1]
我们可以看到EF在后台选择了所有的列。
现在我的问题是:我只想选择一列,但EF选择所有的列。如果我的桌子上有10万条记录,表现会非常糟糕!
也许说使用函数或存储过程,但是当你想在不同的表中选择不同的列时,这不是一个好主意。
您认为如何?有什么办法吗?
你做错了什么。EF将查询所有字段以生成对象 - 显然。但是如果你在查询中做了一个处理,那么它就不会。 THAT说 - 这是我的帮助结束的地方,因为我不熟悉LINQ sql语法,更喜欢我自己的函数式语法。我绝对没有这个问题。 – TomTom
虽然我明白查询看起来很沉重,但我发现EF(现在在v6)与传统的ADO.NET一样快,并且我拥有数十万行的表 - 提供查询被正确书写。如果您担心**的表现**,您是否考虑过在表现**上进行测试**? –