У меня есть таблица серверов с лицензионными ключами / серийными номерами.
Структура таблицы выглядит примерно так:
[
RecordId int,
LicenceKey string,
Status int (available, locked, used, expired etc.)
AssignedTo int (customerId)
....
]
Через мое приложение ASP.NET, когда пользователь решает купить лицензию, нажимая кнопку подтверждения, мне нужно зарезервировать лицензионный ключ для пользователя.
Мой подход, как,
Выберите top 1 licenceKey из KeysTable, где Status = доступно
Обновить статус KeysTable Set = заблокирован
затем верните ключ обратно в приложение.
Меня беспокоит, если два потока asp.net обращаются к одной и той же записи и возвращают один и тот же ключ лицензии.
Как вы думаете, что является лучшей практикой выполнения таких заданий? Есть ли общеизвестный подход или закономерность такого рода проблем?
Где использовать операторы lock (), если они мне нужны?
Я использую Sql Server 2005, хранимые процедуры для доступа к данным, DataLayer, BusinessLayer и Asp.Net GUI.
Спасибо