我正在使用EF 6.0.1。在对某些数据进行SaveChanges()
时,我发现这个SQL出现了:
-- this is generated by EF, according to IntelliTrace:
DECLARE @p int
UPDATE [dbo].[GlobalIds]
SET @p = 0
WHERE ([Id] = @0)
SELECT [UniqueId]
FROM [dbo].[GlobalIds]
WHERE @@ROWCOUNT > 0 AND [Id] = @0
MyTable是一个表(duh),它有一个名为Id
的int PK,而UniqueId
只是一个列(UNIQUEIDENTIFIER
,如果它有任何区别的话)。
@p
是查询上下文中的局部变量 - 为什么需要将其更新为与@ 0参数具有相同的值?@@ROWCOUNT > 0
?此查询看起来只相当于选择UniqueId
:
SELECT [UniqueId]
FROM [dbo].[GlobalIds]
WHERE [Id] = @0
编辑:我知道EF不会输出最佳查询。我试图获得一些关于为什么EF专门做这件事的见解。
答案 0 :(得分:0)
declare @p int
set @p = 0
select @@rowcount
那回到第一行!
唯一的见解可能是你错过的EF表现(不,这不是一个笑话)。 如果没有匹配
,就会发生这种情况WHERE ([Id] = @0)
将错误设置@@ rowcount更新为零 和
WHERE @@ROWCOUNT > 0 AND [Id] = @0
生病了,因为@@ ROWCOUNT> 0 == false