diff --git a/ConfectioneryDatabaseImplement/Pastry.cs b/ConfectioneryDatabaseImplement/Pastry.cs index cac6c89..8f69a58 100644 --- a/ConfectioneryDatabaseImplement/Pastry.cs +++ b/ConfectioneryDatabaseImplement/Pastry.cs @@ -79,7 +79,7 @@ namespace ConfectioneryDatabaseImplement.Models .ContainsKey(rec.ComponentId))); context.SaveChanges(); // обновили количество у существующих записей - foreach (var updateComponent in pastryComponents) + foreach (var updateComponent in pastryComponents.Where(x => model.PastryComponents.ContainsKey(x.ComponentId))) { updateComponent.Count = model.PastryComponents[updateComponent.ComponentId].Item2; model.PastryComponents.Remove(updateComponent.ComponentId); diff --git a/ConfectioneryDatabaseImplement/PastryStorage.cs b/ConfectioneryDatabaseImplement/PastryStorage.cs index aed74f0..b5a60b0 100644 --- a/ConfectioneryDatabaseImplement/PastryStorage.cs +++ b/ConfectioneryDatabaseImplement/PastryStorage.cs @@ -47,6 +47,8 @@ namespace ConfectioneryDatabaseImplement.Implements } using var context = new ConfectioneryDatabase(); return context.Pastries + .Include(x => x.Components) + .ThenInclude(x => x.Component) .Select(x => x.GetViewModel) .Where(x => x.PastryName.Contains(model.PastryName)) .ToList(); @@ -56,6 +58,8 @@ namespace ConfectioneryDatabaseImplement.Implements { using var context = new ConfectioneryDatabase(); return context.Pastries + .Include(x => x.Components) + .ThenInclude(x => x.Component) .Select(x => x.GetViewModel) .ToList(); } @@ -68,26 +72,33 @@ namespace ConfectioneryDatabaseImplement.Implements { return null; } - newPastry = context.Pastries.Add(newPastry).Entity; + context.Pastries.Add(newPastry); context.SaveChanges(); - model.Id = newPastry.Id; - newPastry.UpdateComponents(context, model); return newPastry.GetViewModel; } public PastryViewModel? Update(PastryBindingModel model) { using var context = new ConfectioneryDatabase(); - var pastry = context.Pastries.FirstOrDefault(x => x.Id == model.Id); - if (pastry == null) + using var transaction = context.Database.BeginTransaction(); + try { - return null; + var pastry = context.Pastries.FirstOrDefault(x => x.Id == model.Id); + if (pastry == null) + { + return null; + } + pastry.Update(model); + context.SaveChanges(); + pastry.UpdateComponents(context, model); + transaction.Commit(); + return pastry.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; } - pastry.Update(model); - pastry.UpdateComponents(context, model); - context.Update(pastry); - context.SaveChanges(); - return pastry.GetViewModel; } } }