Las transacciones son útiles cuando hablamos de base de datos y debemos hacer muchas consultas en conjunto, ya que nos permiten realizar un retroceso en la manipulación de datos si una de las consultas del conjunto falla.
Con Entity Framework es posible realizar transacciones, y no solo eso, sino que podemos tener el poder de realizar otras funciones distintas a manipulación de datos y decidir si fallan estas otras funciones aplicar un rollback.
A continuación te mostrare con un pequeño ejemplo.
Teniendo nuestro Entity Framework con el nombre MiEntity:
//creamos nuestro contexto
using (var db = new MiEntity())
{
//creamos el ámbito de la transacción
using (var dbContextTransaction = db.Database.BeginTransaction())
{
try
{
//una consulta
tabla oTabla = new tabla();
oTabla.campo="pato";
//agregamos el elemento
db.tabla.Add(oTabla);
//otra consulta
tabla2 oTabla2 = new tabla2();
oTabla2.campo="pato";
//agregamos otro elemento
db.tabla2.Add(oTabla2);
//guardamos en la base de datos
db.SaveChanges();
//hacemos algo extra a manipulación de datos
//como enviar un mail, suponiendo que regresa true si es exitoso
if (!EnviaUnMail())
{
//hacemos rollback si fallo el envio del mail
dbContextTransaction.Rollback();
}
//Hacemos commit de todos los datos
dbContextTransaction.Commit();
}
catch (Exception ex)
{
//hacemos rollback si hay excepción
dbContextTransaction.Rollback();
}
}
}