デタッチされたエンティティまたは DTO を使用する 3 層アプリケーション (WCF + LinqToSql または EF) でデータ同時実行の問題を処理するための最良の方法は何ですか?
ありがとう。
WCFを使用してすべての値を渡していない場合は、タイムスタンプ(rowversion)フィールドをテーブルに導入できます。この値は、エンティティとDTOのプロパティとして含まれます。LINQ to SQLを使用すると、最適な同時実行性チェックを使用するオプションがあり、すべての値を比較する代わりに、新しいタイムスタンププロパティを指定できます。
これは、Column属性のUpdateCheckプロパティを使用してLINQtoSQLおよびEFに組み込まれています。私の選択肢は、MS SQL SERVERを使用したいだけで、複雑な日付ベースからエンティティへのマッピングを必要としない限り、分離されたPOCOエンティティを使用してLINQtoSQLを使用することです。
この場合、各テーブルで単一の同時実行フィールドを使用し、そのフィールドに対してのみ同時実行チェックを実行します。整数フィールドは問題なく、更新のたびにインクリメントするだけです。
LINQ to SQLを使用した同時実行制御については、ここを参照してください。
これも便利だと思いました:
PSこれはすべて、楽観的同時実行制御を使用してソリューションが正常に機能することを前提としています。データが大幅に変化する高負荷サーバーを使用している場合は、より悲観的な同時実行ソリューションが必要になる場合があります。
変更されたすべての値を where 句に含めます。行が更新されていない場合は、データが古くなっていることがわかり、その時点でユーザーに通知して、実行するアクションを尋ねることができます。