public void ReserveOrder(OrderBindingModel model) { using (var transaction = context.Database.BeginTransaction()) { try { var element = new Order { ClientId = model.ClientId, DateCreate = DateTime.Now, TotalSum = model.TotalSum, OrderStatus = OrderStatus.Зарезервирован }; context.Orders.Add(element); context.SaveChanges(); var groupCars = model.OrderCars .GroupBy(rec => rec.CarId) .Select(rec => new { CarId = rec.Key, Amount = rec.Sum(r => r.Amount) }); foreach (var groupCar in groupCars) { var orderCar = new OrderCar { OrderId = element.Id, CarId = groupCar.CarId, Amount = groupCar.Amount }; context.OrderCars.Add(orderCar); var carDetails = context.CarDetails.Where(rec => rec.CarId == orderCar.CarId); if (carDetails.All(rec => rec.Amount <= context.Details.FirstOrDefault(r => r.Id == rec.DetailId).TotalAmount)) { foreach (var carDetail in carDetails) { var detail = context.Details.FirstOrDefault(r => r.Id == carDetail.DetailId); detail.TotalAmount -= carDetail.Amount; detail.TotalReserve += carDetail.Amount; } } else { throw new Exception("Недостаточно деталей для резервации"); } context.SaveChanges(); } transaction.Commit(); } catch (Exception) { transaction.Rollback(); } } }
public void Add(OrderCar itemCar) { FDIDB.OrderCars.Add(itemCar); }