我有一个存储过程返回类似于此的内容:
PrevLocationId | PrevLocationName | NextLocationId | NextLocationName | BatchId |的ConnectionId
它接收两个参数,BatchId和ConnectionId,它们分别是bigint和int。
使用第一版Entity Framework在C#app中调用此存储过程。
在app中有一个TransactionScope,在一个循环内部将用不同的参数执行这个sproc。
我正在验证应用程序中的缺陷,在我的测试中,循环使用以下参数运行两次:
首次运行:BatchId = 34,ConnectionId = 20
第二轮:BatchId = 34, ConnectionId = 23
当我在sproc调用上设置断点并且我直接在数据库上执行它时,我在两次执行时得到了正确的结果,但是当我允许应用程序执行它时我总是得到来自首次执行两次。
我已在SQL事件探查器中验证数据库在每次执行中都接收到正确的参数。
我尝试删除具有相同结果的交易范围。
是否有人知道实体框架是否存在一些奇怪的缓存事件,或者是否存在故障或可能影响返回结果的事情?
我不知道在哪里可以看。任何见解都会非常感激。
答案 0 :(得分:0)
事实证明,在Entity Framework的第一个版本中,ObjectContext.ExecuteFunction的合并选项默认为AppendOnly,您无法将其设置为其他任何内容。
在这种情况下,我们可以想到的只有两种解决方法可以解决这个问题:
在Entity Framework第4版中,ObjectContext.ExecuteFunction具有重载,我们可以在其中将MergeOption设置为NoTracking,这将解决此类问题。