我有一个对象帐户,被许多对象引用付款。我看到,当我更改付款状态时,帐户的rowversion属性版本也会更新为这样的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对象的条目......
最大的问题不仅在于不必要的更新,而且与帐户关联的多笔付款可能会同时更新,当然会抛出乐观的并发异常并且事务将回滚并且必须重复
有人可以建议在我的代码中检查/修复/更改内容以阻止所有这些。
答案 0 :(得分:3)
假设您使用的是EF4.x,则有一个修补程序可以解决此问题。 我有同样的问题,我可以确认修补程序纠正它。
http://support.microsoft.com/kb/2390624
FIX:当应用程序在.NET Framework 4中使用实体框架时,SQL应用程序中的主体实体会生成不必要的更新
答案 1 :(得分:0)
http://support.microsoft.com/kb/2390624提及:
与Microsoft客户服务和支持部门联系以获取此修补程序。
您可以在此处请求并获取修补程序:Request hotfix
您将收到一封包含下载网址的电子邮件。确保您只复制(
和)
之间的网址。