Tengo un IDbTransaction en una declaración de uso, pero no estoy seguro de si se revertirá si se lanza una excepción en una declaración de uso. Sé que una declaración de uso hará cumplir la llamada de Dispose () ... pero ¿alguien sabe si lo mismo es cierto para Rollback ()?
Actualización: Además, ¿necesito llamar a Commit () explícitamente como lo he hecho a continuación o también se ocupará de eso la declaración de uso?
Mi código se parece a esto:
using Microsoft.Practices.EnterpriseLibrary.Data;
...
using(IDbConnection connection = DatabaseInstance.CreateConnection())
{
    connection.Open();
    using(IDbTransaction transaction = connection.BeginTransaction())
    {
       //Attempt to do stuff in the database
       //potentially throw an exception
       transaction.Commit();
    }
}
                    
                        c#
                                transactions
                                rollback
                                using-statement
                                
                    
                    
                        mezoide
fuente
                
                fuente

Respuestas:
El método Dispose para la clase de transacción realiza una reversión, mientras que la clase de Oracle no lo hace. Entonces, desde la perspectiva de la transacción, depende de la implementación.
La
usingdeclaración para el objeto de conexión, por otro lado, cerraría la conexión a la base de datos o devolvería la conexión al grupo después de restablecerla. En cualquier caso, las transacciones pendientes deben revertirse. Es por eso que una excepción nunca deja una transacción activa por ahí.Además, sí, debe llamar
Commit()explícitamente.fuente
Rollbackse llamaDispose! :)System.Data.OracleConnection, no se revertirá al desechar. O al menos, para nosotros no es así.Tienes que llamar a commit. La declaración de uso no confirmará nada por usted.
fuente
Creo que si hay una excepción que
Commit()nunca se llamó, la transacción se revertirá automáticamente.fuente