一周前,我们记录了一个错误,即查询"选择列表从哪里列=值"没有记录,但数据确实存在。
今天同样的错误再发生3次。但显然数据始终存在,因为大多数时候查询成功,而且数据从未被触及过。
显然,在EntityFramework检索返回结果后,从" Select Count(1)From Table Where column = value"查询,它总是希望有一条记录,所以它在内部使用.Single()。但是当执行此查询时,Sql Server不返回任何记录 至于"从表中选择计数(1)其中x = y"服务器应该总是返回一个结果,即使没有匹配(返回0)
追踪这个错误的难点是,我无法重现它。它只发生了几次,已被记录。
我们也注意到,错误发生了,SQL服务器要么忙,要么长时间运行。
我们正在使用SQL Server 2016。
其他人经历过吗?
感谢。
-------更新
我已经附加了设法从EF中挖掘的查询: 显然这个查询应该总是返回0或某个数字,但不是没有记录。即使有其他进程锁定资源/取消提交事务等。
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[FileRecords] AS [Extent1]
WHERE ([Extent1].[FileStatusId] IN (1000, 2000, 5000)) AND ([Extent1].[UserId] = @p__linq__0)
) AS [GroupBy1]
-- p__linq__0: '1' (Type = Int32, IsNullable = false)
它由EF Linq查询生成:
Context.FileRecords.Count(f => openStatus.Contains(f.FileStatusId) && f.UserId == userId)