muchos ejemplos por ahí defensora de reversión explícita de transacciones de bases de datos, a lo largo de las líneas de:¿Es necesaria una reversión de transacción explícita?
using (var transaction = ...)
{
try
{
// do some reading and/or writing here
transaction.Commit();
}
catch (SqlException ex)
{
// explicit rollback
transaction.Rollback();
}
}
Sin embargo, tienden a hacer esto:
using (var transaction = ...)
{
// do some reading and/or writing here
transaction.Commit();
}
Cuando se produce una excepción, sólo estoy contando en el retroceso implícito de las transacciones que no están comprometidas.
¿Hay algún problema al confiar en este comportamiento implícito? ¿Alguien tiene una razón convincente de por qué no debería hacerlo de esta manera?
El código de ejemplo en su pregunta es posiblemente defectuoso ya que no se vuelve a lanzar. Tal vez la tendencia a olvidar eso es una razón para evitar este patrón? :) –
¿Quién dice que quieres volver a lanzar? Revertir la transacción podría considerarse manejar la excepción, en muchos casos. –
propones dos "opciones" diferentes. Para que el primero se comporte como el segundo, debe volver a tirar. Para ser equivalente, uno de los dos ejemplos debe cambiar. –