У меня есть рабочая роль Azure, которая выполняет ночное выставление счетов.Поскольку Azure может создать новый экземпляр в любое время, а затем запустить его до его выключения, я должен убедиться, что в транзакциях только 1 из этого сотрудника выставляет счет конкретному клиенту.Плата за людей дважды приводит к их расстройству.
Итак, у меня есть:
- Создание транзакции
- Чтение записи клиента
- Если запись была начислена,выход
- Вставить заказ (который будет списан позже) - в случае сбоя транзакция отката
- Записать запись заказа Пометить запись клиента как созданный заказ
- Обновить запись клиента - если онасбой, транзакция отката
- Подтверждение транзакции
У записи клиента есть столбец отметки времени.Когда я обновляю запись, у меня есть, где «CustomerId = @id и ts = @ts», поэтому обновление завершится неудачно (вернет 0 обновленных строк), если отметка времени изменилась.
Что я должен использовать для транзакции/ уровень изоляции и как мне это кодировать (C #), чтобы, если 2 работника пытались сделать это одновременно для одной и той же записи, эта ошибка не удалась.Достаточно ли стандартной (что бы это ни значило) транзакции, поскольку в обновлении у меня есть отметка времени?
Или мне нужно что-то сделать, чтобы чтение записи дало мне полную блокировку записи? И если это произойдетЧто происходит, когда другой работник пытается прочитать эту запись?Исключение?Или оно приостановлено до тех пор, пока первый работник не завершит транзакцию, а затем чтение не будет выполнено?
спасибо - Дейв