ライセンス キー/シリアル番号の SQL サーバー テーブルがあります。テーブル構造は次のようなものです。
[
RecordId int,
LicenceKey string,
Status int (available, locked, used, expired etc.)
AssignedTo int (customerId)
....
]
ASP.NET アプリケーションを使用して、ユーザーが同意ボタンをクリックしてライセンスを購入することを決定した場合、ユーザーのライセンス キーを予約する必要があります。私のアプローチは、KeysTable から上位 1 つの licenceKey を選択します。ここで、Status = available を更新します。KeysTable Set status = locked にしてから、キーをアプリケーションに戻します。
私の懸念は、2 つの asp.net スレッドが同じレコードにアクセスし、同じライセンス キーを返す場合です。そのような割り当てを行うベストプラクティスは何だと思いますか? この種の問題に対するよく知られたアプローチまたはパターンはありますか? 必要な場合、lock() ステートメントをどこで使用しますか?
私はSql Server 2005、データアクセス用のストアドプロシージャ、DataLayer、BusinessLayer、およびAsp.Net GUIを使用しています。
ありがとう