Как установить транзакции только для 1 обновления записи? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть рабочая роль Azure, которая выполняет ночное выставление счетов.Поскольку Azure может создать новый экземпляр в любое время, а затем запустить его до его выключения, я должен убедиться, что в транзакциях только 1 из этого сотрудника выставляет счет конкретному клиенту.Плата за людей дважды приводит к их расстройству.

Итак, у меня есть:

  1. Создание транзакции
  2. Чтение записи клиента
  3. Если запись была начислена,выход
  4. Вставить заказ (который будет списан позже) - в случае сбоя транзакция отката
  5. Записать запись заказа Пометить запись клиента как созданный заказ
  6. Обновить запись клиента - если онасбой, транзакция отката
  7. Подтверждение транзакции

У записи клиента есть столбец отметки времени.Когда я обновляю запись, у меня есть, где «CustomerId = @id и ts = @ts», поэтому обновление завершится неудачно (вернет 0 обновленных строк), если отметка времени изменилась.

Что я должен использовать для транзакции/ уровень изоляции и как мне это кодировать (C #), чтобы, если 2 работника пытались сделать это одновременно для одной и той же записи, эта ошибка не удалась.Достаточно ли стандартной (что бы это ни значило) транзакции, поскольку в обновлении у меня есть отметка времени?

Или мне нужно что-то сделать, чтобы чтение записи дало мне полную блокировку записи? И если это произойдетЧто происходит, когда другой работник пытается прочитать эту запись?Исключение?Или оно приостановлено до тех пор, пока первый работник не завершит транзакцию, а затем чтение не будет выполнено?

спасибо - Дейв

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...