Mira permiteme que te sugiera algo, y si ya lo tenes hecho o lo descartastes por alguna razon no te ofendas.
Me imagino que las clases Factura y Detalle las usas en tu logica de negocio.
Yo crearía una capa llamada DataAccess o "Acceso a datos" en la cual consentro todo el acceso a datos, agregando una Facade para acceder al mismo.
Haciendo por ejemplo DataAccessFacade.Instance.Save(Factura fac, Detalle[] det), o si desde Factura podes acceder a los Detalle[]. Entonces quizas no debas pasar tambien los Detalles.
Adentro el save podes hacer algo por el estilo:
Save(Factura fac, Detalle[] det)
{
SqlConnection conn
= new SqlConnection
("conexion"); SqlTransaction trans = conn.BeginTransaction();
try
{
GuardarFactura(factura, trans); // Usa la trans para guardar con los cmd
foreach (det in Detalle in Factura.Detalles)
{
GuardarDetalle(det, trans); // Usa la trans para guardar con los cmd
}
trans.Commit();
}
catch(Exception ex)
{
Log(ex);
Rollback
}
}
De esta forma centralizas desde donde guardas tus objetos de negocio... si esta estructura no te es posible quizas puedas compartir tu transaccion entre los distintos Guardar de los distintos objectos Factura y Detalle...pero me parece una solucion un poco sucia...
Que opina el resto del foro?
Saludos, Daniel.