2011-08-10 8 views
0

私はasp.net mvc 3 Webアプリケーションを開発中です。 私のアプリケーションでは、私のサーバーにコールを送信するjavascriptクライアントがあります。asp.net mvc - 競合状態:同じパラメータを持つメソッドをロックする

  • は、オブジェクトの新しいインスタンスを作成します -
  • は、リモートWebサーバー呼び出し、それをデータベースに保存します:通話の 一つは順番にすることを、私の方法に向けられています。

オブジェクトを本当に存在するかどうかを調べるためにデータベースを照会して終了するかどうかを決定します(終了する場合は終了します)。

私の問題は、2つの呼び出しがちょうど1つずつ行われると、オブジェクトがデータベースに保存される機会がなくなり、両方のスレッドが処理を続ける必要があると考えられるということです。

私が望むのは、同じパラメータで呼び出されたスレッドのみのメソッドをロックすることです。メソッド全体またはその一部にロックを使用することは、パフォーマンスに重大な問題を引き起こすため、使用できません。

どうすればいいですか?

+0

データベースレベルで確認してください。そのうちの1人がセーブすると、何らかの制約に違反するため、もう1人は失敗します。 – clyc

+0

これを行うには良い方法はありませんか? – vondip

+0

ハッシュテーブルを作成して、オブジェクトがすでに存在するかどうかを確認することができます – clyc

答えて

2

このシナリオでは、シリアライズ可能な分離レベルでデータベーストランザクションを使用します。これにより、読み込み操作と挿入操作の一貫性が保証されます。

関連する問題