2012-07-20 61 views
3

我有一個對象被許多對象支付的帳戶支付。我看到,當我更改付款狀態的帳戶的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

請用更多的信息更新您的問題 - 哪個版本。 EF的聲明,實體是如何聲明的等等 – 2012-08-28 13:43:45

回答

3

假設您使用EF4.x,則有一個修補程序可以解決此問題。 我有同樣的問題,我可以確認修補程序糾正它。

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

FIX:在SQL應用的主要實體生成不必要的更新當應用程序使用的實體框架在.NET Framework 4