多くのオブジェクト Payment によって参照されるオブジェクト Account があります。支払いの状態を変更すると、アカウントの行バージョン プロパティ バージョンも次のような 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 オブジェクトのエントリが表示されません...
大きな問題は、不必要な更新だけでなく、アカウントに関連付けられた複数の支払いが同時に更新される可能性があり、もちろん楽観的同時実行例外がスローされ、トランザクションがロールバックして繰り返さなければならないという事実です。
誰かが私のコードをチェック/修正/変更して、すべてを停止することを提案できますか?