3

多くのオブジェクト 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 オブジェクトのエントリが表示されません...

大きな問題は、不必要な更新だけでなく、アカウントに関連付けられた複数の支払いが同時に更新される可能性があり、もちろん楽観的同時実行例外がスローされ、トランザクションがロールバックして繰り返さなければならないという事実です。

誰かが私のコードをチェック/修正/変更して、すべてを停止することを提案できますか?

4

2 に答える 2

3

EF4.x を使用していると仮定すると、この問題を修正するホットフィックスがあります。私は同じ問題を抱えていましたが、修正プログラムで修正されていることを確認できます。

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

修正: SQL アプリケーションのプリンシパル エンティティは、アプリケーションが .NET Framework 4 で Entity Framework を使用するときに不要な更新を生成します。

于 2012-09-03T07:13:14.853 に答える
0

マシュー・アーツの答えへの追加:

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

マイクロソフト カスタマー サービス & サポートに連絡して、修正プログラムを入手してください。

ここでホットフィックスをリクエストして入手できます:ホットフィックスのリクエスト

ダウンロードURLが記載されたメールが届きます。(との間の URL のみをコピーしてください)

于 2013-10-11T14:29:51.917 に答える