sábado, 13 de junio de 2009

TRANSACCIONES CON LINQ

Hola a todos, les queria mostrar la forma en que pueden trabajar con transacciones en LINQ, si bien las mismas trabajan en forma implicita, la carga de un encabezado y detalles puede tornarse un martirio. En fin.... aqui tienen el código, lo probe y funciona muy bien. Saludos!!!!

//en este caso "Conexion" es una instancia de mi DataContext, mi relacion de LINQ con mi BD
//trabajemos con transacciones...
DbTransaction ts = null;
try
{
Conexion.Connection.Open();
ts = Conexion.Connection.BeginTransaction();
Conexion.Transaction = ts;
//empecemos a grabar las dos tablas ENCABEZADO y DETALLES
Encabezado.NombreEncabezado = NombreEncabezado;
Conexion.lnqEncabezado.InsertOnSubmit(Encabezado);
Conexion.SubmitChanges();
//haciendo esto ya podemos trabajar con la clave que se crea en el encabezado
//para usarla como foranea en los detalles...
//si tienen muchos detalles pueden usar un foreach... por ahora supongamos que solo
// tenemos un detalle
Detalles.Cantidad = cantidad;
Detalles.CodigoEncabezado = Encabezado.CodigoEncabezado;
.....
Conexion.lnqDetalles.InsertOnSubmit(Detalles);
Conexion.SubmitChanges();
ts.Commit();
}
catch (Exception ex)
{
ts.Rollback();
}
finally
{
Conexion.Connection.Close();
}

No hay comentarios: