以下 linq-to-entities 查询抛出
Entity Framework Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
在 ToList() 之后。
var q = (from contact
in cDB.Contacts.Where(x => x.Templategroepen.Any(z => z.Autonummer == templategroep.Autonummer)
&& !x.Uitschrijvings.Any(t => t.Templategroep.Autonummer == templategroep.Autonummer))
select contact.Taal).Distinct();
((System.Data.Objects.ObjectQuery)q).ToTraceString()
给我:
SELECT
[Distinct1].[Taal] AS [Taal]
FROM ( SELECT DISTINCT
[Extent1].[Taal] AS [Taal]
FROM [dbo].[ContactSet] AS [Extent1]
WHERE ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[TemplategroepContact] AS [Extent2]
WHERE ([Extent1].[Autonummer] = [Extent2].[Contacts_Autonummer]) AND ([Extent2].[Templategroepen_Autonummer] = @p__linq__0)
)) AND ( NOT EXISTS (SELECT
1 AS [C1]
FROM [dbo].[UitschrijvingenSet] AS [Extent3]
WHERE ([Extent1].[Autonummer] = [Extent3].[Contact_Autonummer]) AND ([Extent3].[Templategroep_Autonummer] = @p__linq__1)
))
) AS [Distinct1]
tracestring 的查询在 sql Management Studio 中运行时间不到 1 秒,但在实际列出它时超时?这怎么可能呢?
*更新:为查询添加了 SQL PROFILER 输出*其运行速度与 EF ToList() 一样慢(>30 秒)
exec sp_executesql N'SELECT
[Distinct1].[Taal] AS [Taal]
FROM ( SELECT DISTINCT
[Extent1].[Taal] AS [Taal]
FROM [dbo].[ContactSet] AS [Extent1]
WHERE ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[TemplategroepContact] AS [Extent2]
WHERE ([Extent1].[Autonummer] = [Extent2].[Contacts_Autonummer]) AND ([Extent2].[Templategroepen_Autonummer] = @p__linq__0)
)) AND ( NOT EXISTS (SELECT
1 AS [C1]
FROM [dbo].[UitschrijvingenSet] AS [Extent3]
WHERE ([Extent1].[Autonummer] = [Extent3].[Contact_Autonummer]) AND ([Extent3].[Templategroep_Autonummer] = @p__linq__1)
))
) AS [Distinct1]',N'@p__linq__0 int,@p__linq__1 int',@p__linq__0=1,@p__linq__1=1
最佳答案
我在 EF6 中发现了这个问题。
await _context.Database.SqlQuery<MyType>(sql)
即使我的超时值调至 60 秒,仍然超时。然而,在 SSMS 中执行完全相同的 SQL(使用探查器确认我传入的 SQL 未被修改)在一秒钟内产生了预期的结果。
执行sp_updatestats
为我解决了这个问题。
关于sql-server - 查询在 SQL 中运行时间不到一毫秒,但在 Entity Framework 中超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11344499/