Aquí está la arquitectura actual de mi código fuente de ámbito de transacción. El tercer inserto arroja una excepción .NET (No es una Excepción de SQL) y no está retrotrayendo las dos instrucciones de inserción anteriores. ¿Que estoy haciendo mal?TransactionScope no retrotraer transacción
EDIT: Eliminé el try/catch de insert2 e insert3. También eliminé la utilidad de manejo de excepciones de insert1 try/catch y puse "throw ex". Todavía no revierte la transacción.
EDIT 2: He añadido el try/catch en el método Insert3 y simplemente pongo un "tiro" en la instrucción catch. Todavía no revierte la transacción.
ACTUALIZACIÓN: Basándose en la información que he recibido, la clase "SqlHelper" está utilizando el objeto SqlConnection para establecer una conexión con la base de datos, a continuación, crea un objeto SqlCommand, establezca la propiedad CommandType a "StoredProcedure" y llama a la Método ExecuteNonQuery de SqlCommand.
Tampoco agregué el Enlace de transacción = Desvincular explícitamente a la cadena de conexión actual. Añadiré eso durante mi próxima prueba.
public void InsertStuff()
{
try
{
using(TransactionScope ts = new TransactionScope())
{
//perform insert 1
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /* create parameters for first insert */ };
sh.Insert("MyInsert1", sp);
}
//perform insert 2
this.Insert2();
//perform insert 3 - breaks here!!!!!
this.Insert3();
ts.Complete();
}
}
catch(Exception ex)
{
throw ex;
}
}
public void Insert2()
{
//perform insert 2
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /* create parameters for second insert */ };
sh.Insert("MyInsert2", sp);
}
}
public void Insert3()
{
//perform insert 3
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /*create parameters for third insert */ };
sh.Insert("MyInsert3", sp);
}
}
No quiero poner en duda sus habilidades de desarrollo, etc. pero, ¿cómo está probando que la transacción se ha revertido? ¿Es posible que la transacción funcione correctamente pero está malinterpretando los resultados? ¿Tal vez está pasando algo más y nosotros/ustedes están ladrando el árbol equivocado? –
Espero que esto ayude: http://stackoverflow.com/questions/28191333/error-en-ambient-transaction-doesnt-rollback-the-transaction/28258935#28258935 –