データベースにリソースが格納されているマルチスレッドC#WCFサーバーがあります。EFでdbにアクセスしています。
サーバーは多くのワーカーからのリクエストを処理しています。労働者はグループでつながっています。各グループには、データベースに独自のリソースがあります。一部のグループには、別のグループと共有されているリソースがあります。
すべてのリクエストは、同期、作成、更新、削除などのリソースに関するものです。
競合状態に問題があります。ワーカーAとBが同じグループに属している場合、ワーカーAが更新を要求し、次にBが同期を要求し、Aの要求が終了する前にBの要求が開始および終了すると、ワーカーBはAを取得しません。アップデート。
エンティティフレームワークを使用して、次のようなアトミック操作を実行する方法はありますget_and_increase_if
か?データベース値にツールのようなセマフォを実装したいと思います。
この問題を解決する他の方法はありますか?
同期はリビジョンカウンターによって行われます。グループに改訂があります。作成/更新は次の方法で行われます。
Increase group revision()
Set new/updated object revision to new group revision()
編集:多くのリソースタイプがあり、それぞれがdbの独自のテーブルにあります。したがって、リソースのリビジョンとして次の値を設定することはできません。