私は LINQ to SQL を使用しており、ビュー カウンターの相互接続をインクリメントする際に少し問題があります。
私が使用している小さなコードは次のとおりです。
t = this.AppManager.ForumManager.GetThread(id);
t.Views = t.Views + 1;
this.AppManager.DB.SubmitChanges();
現在、私のテストでは、これを複数回、非同時に実行しています。このテストを実行するオブジェクトのコピーは合計 4 つあります。
つまり、ロックの問題などはありませんが、4 つのデータ コンテキストがあります。
さて、私はこれが次のように機能することを期待しています: 行をフェッチし、フィールドを変更し、行を更新します。ただし、これは ChangeConflictException をスローしています。
これのコピーが同時に実行されていない場合、変更が競合するのはなぜですか?
特定のテーブルで変更の競合を無視する方法はありますか?
編集:答えが見つかりました:
テーブルのすべての列に "UpdateCheck = Never" を設定して、後攻スタイルの更新を作成できます。これは、LINQ に移植する前にアプリケーションが使用していたものであるため、ここではそれを使用します。
EDIT2:上記の私の修正は実際に例外がスローされるのを防ぎましたが、根本的な問題は修正されませんでした:
複数のデータ コンテキストがあるため、各オブジェクトの複数のキャッシュ コピーが存在することになります。ページが読み込まれるたびにデータ コンテキストを再作成する必要がありますか?
むしろ、すべてを忘れるようにデータ コンテキストに指示したいと思います。これは可能ですか?