![](/img/trans.png)
[英]Why is Entity Framework calling my stored procedure but returning an incorrect value?
[英]Entity Framework calling stored procedure in a loop returning incorrect results
我有一个存储过程,返回的内容与此类似:
PrevLocationId | PrevLocationName | NextLocationId | NextLocationName | BatchId | 连接ID
它接收两个参数,BatchId和ConnectionId分别是bigint和int。
使用Entity Framework的第一个版本在C#应用程序中调用此存储过程。
在应用程序中,有一个TransactionScope,在一个循环中,该循环将使用不同的参数执行此sproc。
我正在验证应用程序中的缺陷,在该缺陷中,在我的测试中,循环使用以下参数运行了两次:
第一次运行:BatchId = 34,ConnectionId = 20
第二次运行:BatchId = 34,ConnectionId = 23
当我在sproc调用上设置断点并直接在数据库上执行该断点时,两次执行都得到正确的结果,但是当我允许应用程序执行该断点时, 我总是从第一次执行中两次都得到结果。
我已经在SQL事件探查器中验证了数据库在每次执行中都接收到正确的参数。
我尝试删除具有相同结果的交易范围。
是否有人知道实体框架是否执行某些奇怪的缓存操作,或者是否存在故障或可能影响返回结果的内容?
我不知道还能去哪里。 任何见识将不胜感激。
事实证明,在Entity Framework的第一个版本中,ObjectContext.ExecuteFunction的合并选项默认值为AppendOnly,您无法将其设置为其他任何内容。
在这种情况下,我们可以想到只有两种解决方法可以解决此问题:
在Entity Framework版本4中,ObjectContext.ExecuteFunction具有重载,在重载中,我们可以将MergeOption设置为NoTracking,这将解决此类问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.