2011-06-16 7 views
15

Ok lo siento por el nombre del sujeto de largo ...Nhibernate session.BeginTransaction reversión automática de excepción dentro Utilizando

Si hago lo siguiente:

using (var transaction = session.BeginTransaction()) 
{ 
    // do something 
    transaction.Commit(); 
} 

Si mi hacer algo provocó una excepción , ¿verdad reversión automática, o necesito para comprobar de forma explícita para este, como a continuación:

using (var transaction = session.BeginTransaction()) 
{ 
    try 
    { 
     // do something 
     transaction.Commit(); 
    } 
    catch (Exception) 
    { 
     transaction.Rollback(); 
    } 
} 

Respuesta

13

es una suposición segura que la transacción será r Olled back si la confirmación falla en un bloque de uso.

ITransaction envuelve una transacción ADO.NET entre bastidores, por lo que depende de la implementación específica del proveedor. El método Dispose en el código fuente que verifiqué (2.1) asume que llamando al Dispose en el interno IDbTransaction lo tira hacia atrás.

+0

¿El primer ejemplo de código está bien para usar? Estoy usando SQL Server y Mysql como proveedores (basados ​​en la configuración subyacente), así que supongo que eso es usando ADO. – somemvcperson

+1

El primer ejemplo de código está bien para usar y revertirá la transacción si falla la confirmación. –

Cuestiones relacionadas