public void Update(Promocion p, IEnumerable<Plato> platos) { if (platos == null || platos.Count() == 0) { throw new DataException("No se pueden quitar todos los platos de una promoción"); } using (MySqlConnection conn = new MySqlConnection(Constants.QueryConn)) { MySqlTransaction trans = null; try { conn.Open(); trans = conn.BeginTransaction(); if (conn.Execute(Constants.UpdatePromo, p, trans, null, CommandType.Text) == -1) { //Promo not updated throw new DataException("Error al actualizar la promoción"); } if (DeleteAllPlatos(p, conn, trans) == -1) { //Update de platos no realizado throw new DataException("Error al actualizar los platos asociados a la promoción"); } foreach (var plato in platos) { Plato_Promocion pp = new Plato_Promocion(); pp.Plato_Id = plato.Id; pp.Promocion_Id = p.Id; if (conn.Execute(Constants.InsertPlatoPromo, pp, trans, null, CommandType.Text) == -1) { throw new DataException("Error al actualizar los platos asociados a la promoción"); } } trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw ex; } finally { conn.Close(); } } }
/// <summary> /// Genera una nueva promocion con los platos asociados, si algo sale mal, lanza exception /// </summary> public void Insert(Promocion p, IEnumerable<Plato> platos) { if (platos == null || platos.Count() == 0) { throw new DataException("No se puede generar una promoción sin platos asociados"); } using (MySqlConnection conn = new MySqlConnection(Constants.QueryConn)) { MySqlTransaction trans = null; try { conn.Open(); trans = conn.BeginTransaction(); if (conn.Execute(Constants.InsertPromo, p, trans, null, CommandType.Text) == -1) { //Promo not updated throw new DataException("Error al generar la nueva promoción"); } long id = conn.Query<long>(Constants.SelectLastId, null, trans, true, null, CommandType.Text).ElementAt(0); foreach (var plato in platos) { Plato_Promocion pp = new Plato_Promocion(); pp.Plato_Id = plato.Id; pp.Promocion_Id = Convert.ToUInt32(id); if (conn.Execute(Constants.InsertPlatoPromo, pp, trans, null, CommandType.Text) == -1) { throw new DataException("Error al generar la nueva promoción"); } } trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw ex; } finally { conn.Close(); } } }