public static int GrabarDetalle<T>(this IEnumerable<T> lista, string expresionDelete, params object[] parametros) where T : Instrumental1 { int i = 0; int x = 0; using (ispDB db = new ispDB()) { try { db.BeginTransaction(); db.GetTable<T>().Where(expresionDelete, parametros).Delete(); int total = lista.Count(); for (int ix = 0; ix < total; ix++) { T objeto = lista.ElementAt(ix); x = db.Insert<T>(objeto); if (i == 0) i = x; } db.CommitTransaction(); } catch (Exception) { i = 0; db.RollbackTransaction(); throw; } } return i; }
/// <summary> /// Graba una lista de registros que generalmente proviene de un DataSource tipo Object /// </summary> /// <param name="lista">De tipo BindingListView contenedora de los registros</param> /// <returns>Numero generado para PK en Insert o registros afectados en Update</returns> public int Grabar(IEnumerable <sucursal> items) { int i = 0; int n = 0; items = items.Where(x => x.Modificado == true).ToList(); if (items.Count() == 0) { return(0); } using (ispDB db = new ispDB()) { try { db.BeginTransaction(); n = db.sucursales.Max(x => (int?)x.id) ?? 1; foreach (var item in items) { if (item.id == 0) { item.id = ++n; } i = db.InsertOrReplace(item); db.telefonossucursales.Where(x => x.idsucursal == item.id).Delete(); foreach (var item1 in item.fktelefonossucursal) { if (item1.idsucursal == 0) { item1.idsucursal = item.id; } db.Insert(item1); } } db.CommitTransaction(); } catch (Exception) { db.RollbackTransaction(); throw; } } if (i == 0) { throw new Exception("Error de concurrencia, por favor vuelva a realizar la transaccion."); } return(i); }