Transacciones en "dapper-dot-net"

architecture dapper data-access-layer

Pregunta

¿Cómo creo una transacción si mi DAL está utilizando dapper-dot-net?

Mi aplicación c # winform se utilizará en la red y los datos se guardarán en un servidor sql central.

Mi caso de uso requiere el uso de transacciones. ¿Puedo hacer esto usando Dapper, o tendré que usar algo como NHibernate?

Además, ¿hay algún riesgo o limitación con este marco si estoy usando procedimientos almacenados? ¿Tendré que cambiar mi enfoque debido a posibles limitaciones?

Respuesta aceptada

No me he encontrado con ninguna limitación con el uso de sprocs y los riesgos que tienes con dapper son los mismos riesgos que tendrías con sprocs

Aquí hay un ejemplo simple sobre cómo usar transacciones con dapper

using (var connection = Db.GetConnection())
{
     connection.Open();
     IDbTransaction transaction = connection.BeginTransaction();
     try
     {
         var newId= connection.Query<int>(@"Select id from table1 where id=@id", new{id}, transaction).Single();
         connection.Execute(@"INSERT into table1 ...",new {p1, p2}, transaction);
         connection.Execute(@"INSERT into table2 ...",new {p1, p2}, transaction);
         transaction.Commit();
     }
     catch (Exception ex)
     {
         transaction.Rollback();
     }
}

Respuesta experta

dapper puede usar tanto transacciones de ado.net como transacciones implícitas. Para las transacciones de ado.net, simplemente cree la transacción normalmente y bríndela a través del parámetro de transaction que está disponible en los métodos principales. Para transacciones implícitas, simplemente use TransactionScope normalmente.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué