Tengo un IDbTransaction en una instrucción de uso, pero no estoy seguro si se retrotraerá si se lanza una excepción en una instrucció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()?¿Se usará una instrucción para deshacer una transacción de base de datos si se produce un error?
Actualización: Además, ¿tengo que llamar a Commit() explícitamente como lo he mencionado más abajo o también se ocupará de ello con la instrucción using?
Mi código es algo así como 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();
}
}
Hola, solo para aclarar el caso "commit". Es obviamente obligatorio porque, al usar() {} solo se llama al método Dispose(). La clase Transaction.Dispose no pudo saber si debería comprometerse o descartar si el Commit también era automático :) –
Véase también http://stackoverflow.com/questions/6418992/is-it-a-better-practice-to-explicitly -call-transaction-rollback-or-let-an-except – nawfal