Actualmente estoy teniendo una confusión con respecto al constructor del objeto TransactionScope.TransactionScopeOption - Obligatorio o RequiresNew
Digamos que los usuarios de mi sitio web pueden solicitar productos. Al enviar su solicitud, realizo una verificación de la cantidad actual que queda y si es mayor a cero, llevo a cabo la solicitud. Luego, al final, disminuyo la cantidad actual que queda.
Todo el proceso está dentro de una transacción, utilizando .NET transactionScope.
Después de leer varios artículos sobre el objeto .NET transactionScope, ahora estoy un poco confundido acerca del valor de la TransactionScopeOption que se utilizará para el constructor de transactionScope.
¿Cuál de los siguientes es más apropiado para el caso descrito anteriormente:
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();
}
}
O
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();
}
}
Tenga en cuenta que lo anterior es sólo una simplificación de mi problema real. Solo estoy interesado en conocer el valor correcto de TransactionScopeOption (RequiresNew o Obligatorio) para este caso.
Gracias por responder.
En mi caso, el método processRequest en sí nunca participará dentro de otra transacción. Sólo estoy mirando para asegurar que después de una petición ejecuta: "DB consulta para comprobar si la cantidad es aún mayor que cero" en el momento en que se ejecuta: "DB de consulta para solicitar y decremento de la cantidad" la cantidad aún no ha llegado a cero debido a otra solicitud, ejecutando el mismo método ProcessRequest. Así que supongo que el valor predeterminado es TransactionScope.Required. –
Definitivamente, de lo contrario, estarías (involuntariamente) dando a entender que había algo especial sobre ProcessRequest que requería que utilizara su propia transacción. –
Ok. Gracias por la rápida respuesta. –