3

我有一个对象帐户,它被许多对象付款引用。我看到,当我更改付款状态时,Account 的 rowversion 属性 Version 也会使用如下 SQL 进行更新:

update [dbo].[Account]
set    @p = 0
where  (([Id] = 2606 /* @0 */)
        and ([Version] = 0x0000000000000C8C /* @1 */))

select [Version]
from   [dbo].[Account]
where  @@ROWCOUNT > 0
       and [Id] = 2606 /* @0 */

该交易中的账户绝对没有其他更新。我多次检查我的代码,并没有看到 Account 对象有任何修改。此外,我已经覆盖了 DbContext 的 SaveChanges,并且在 EntityState.Modified 中没有看到 Account 对象的条目...

最大的问题不仅是不必要的更新,而且与一个帐户关联的多个付款可能会同时更新,当然会抛出一个乐观并发异常,并且事务将回滚并且必须重复。

有人可以建议在我的代码中检查/修复/更改什么来阻止这一切。

4

2 回答 2

3

假设您使用的是 EF4.x,那么有一个修补程序可以解决此问题。我有同样的问题,我可以确认修复程序纠正了它。

http://support.microsoft.com/kb/2390624

修复:当应用程序使用 .NET Framework 4 中的实体框架时,SQL 应用程序中的主体实体会生成不必要的更新

于 2012-09-03T07:13:14.853 回答
0

Matthew Artz 回答的补充:

http://support.microsoft.com/kb/2390624提到:

请联系 Microsoft 客户服务和支持以获取此修补程序。

您可以在此处请求并获取修补程序:请求修补程序

您将收到一封包含下载 URL 的电子邮件。确保只复制 和 之间的(URL )

于 2013-10-11T14:29:51.917 回答