В настоящее время у меня возникает путаница в отношении конструктора объекта TransactionScope.
Скажите, что пользователи моего сайта могут заказывать продукты. При отправке их запроса я выполняю проверку оставшегося количества слева и, если он еще больше нуля, я выполняю запрос. Затем, в конце, я уменьшаю текущую оставшуюся величину.
Весь процесс находится в транзакции, используя .NET transactionScope.
После прочтения нескольких статей об объекте .NET transactionScope, я сейчас немного запутался в значении TransactionScopeOption, которое будет использоваться для конструктора транзакцииScope.
Какое из следующих ниже подходит для случая, описанного выше:
public void ProcessRequest()
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.Serializable;
using (TransactionScope currentScope = new TransactionScope(TransactionScopeOption.RequiresNew, transactionOptions)) {
// DB Query to verify if quantity is still greater than zero
// DB Query to request and decrement quantity
currentScope.Complete();
}
}
ИЛИ
public void ProcessRequest()
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.Serializable;
using (TransactionScope currentScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions)) {
// DB Query to verify if quantity is still greater than zero
// DB Query to request and decrement quantity
currentScope.Complete();
}
}
Обратите внимание, что приведенное выше просто упрощает мою фактическую проблему. Мне просто интересно знать правильное значение TransactionScopeOption (RequiresNew или Обязательный) для такого случая.
Спасибо за ответ.