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(); } } }