我给出了一个简单的 EF 查询
return context.GlobalEntities
.Where(ge => ge.IsActive == true)
.ToList()
它被翻译成以下 SQL 查询
SELECT
[Extent1].[GlobalEntityId] AS [GlobalEntityId],
[Extent1].[GlobalEntityName] AS [GlobalEntityName],
[Extent1].[GlobalEntityAlias] AS [GlobalEntityAlias],
[Extent1].[GlobalEntityTypeId] AS [GlobalEntityTypeId],
[Extent1].[IsActive] AS [IsActive],
[Extent1].[CreatedBy] AS [CreatedBy],
[Extent1].[CreatedAt] AS [CreatedAt],
[Extent1].[ChangedBy] AS [ChangedBy],
[Extent1].[ChangedAt] AS [ChangedAt],
[Extent1].[EmailAddress] AS [EmailAddress],
[Extent1].[AverageActionTimeInHrs] AS [AverageActionTimeInHrs],
[Extent1].[AverageCreationTimeInHrs] AS [AverageCreationTimeInHrs]
FROM [dbo].[GlobalEntity] AS [Extent1]
WHERE 1 = [Extent1].[IsActive]
当我执行上面的代码时,它需要 45 秒才能执行,而当我从 SSMS 执行相同的查询时只需要 1 秒。
关于为什么实体框架执行简单查询需要这么长时间的任何想法。这是 SQL 探查器所说的
SQL:BatchCompleted SELECT
[Extent1].[GlobalEntityId] AS [GlobalEntityId],
[Extent1].[GlobalEntityName] AS [GlobalEntityName],
[Extent1].[GlobalEntityAlias] AS [GlobalEntityAlias],
[Extent1].[GlobalEntityTypeId] AS [GlobalEntityTypeId],
[Extent1].[IsActive] AS [IsActive],
[Extent1].[CreatedBy] AS [CreatedBy],
[Extent1].[CreatedAt] AS [CreatedAt],
[Extent1].[ChangedBy] AS [ChangedBy],
[Extent1].[ChangedAt] AS [ChangedAt],
[Extent1].[EmailAddress] AS [EmailAddress],
[Extent1].[AverageActionTimeInHrs] AS [AverageActionTimeInHrs],
[Extent1].[AverageCreationTimeInHrs] AS [AverageCreationTimeInHrs]
FROM [dbo].[GlobalEntity] AS [Extent1]
WHERE 1 = [Extent1].[IsActive]
Application Name: EntityFramework
NTUserName: user
CPU: 187
Reads: 1357
Writes: 0
Duration: 45157
ProcessID: 9520
StartTime: 2012-07-06 10:38:40.797
End TIme: 2012-07-06 10:39:25.953