public void SaveOrder(ImportOrder importOrder) { //cart data is deserialied from sesssion=>create new cart object //=>not know to the EF, write all the objects into db=>alrealdy existed, causing error // notify EF that the objects exist and shouldn’t be stored in the database unless they are modified context.AttachRange(importOrder.Lines.Select(l => l.Product)); if (importOrder.ImportOrderID == 0) { context.ImportOrders.Add(importOrder); } context.SaveChanges(); }
public async Task <ImportOrder> Update(ImportOrder order) { var orderToUpdate = await _context.ImportOrders .Include(io => io.ImportedProducts) .ThenInclude(ip => ip.Product) .FirstOrDefaultAsync(o => o.ID == order.ID); orderToUpdate.PlacementDate = order.PlacementDate; orderToUpdate.WholesalerName = order.WholesalerName; orderToUpdate.WholesalerAddress = order.WholesalerAddress; orderToUpdate.WholesalerPhone = order.WholesalerPhone; _context.Update(orderToUpdate); await _context.SaveChangesAsync(); return(orderToUpdate); }
public async Task <ImportOrder> Create(ImportOrder orderToCreate, IList <ProductItem> importedProductsData) { ImportOrder order = new ImportOrder() { PlacementDate = orderToCreate?.PlacementDate ?? DateTime.MinValue, WholesalerName = orderToCreate.WholesalerName, WholesalerAddress = orderToCreate.WholesalerAddress, WholesalerPhone = orderToCreate.WholesalerPhone, }; var importedProducts = new List <ImportedProduct>(); var productsQuery = _context.Products .Include(p => p.ImportedProducts) .ThenInclude(op => op.ImportOrder); foreach (var productItem in importedProductsData) { var product = await productsQuery .FirstOrDefaultAsync(p => p.ID == productItem.Product.ID); var importedProduct = new ImportedProduct { Product = product, ImportOrder = order, Quantity = productItem.Quantity }; product.ImportedProducts.Add(importedProduct); product.Stock = product.Stock + productItem.Quantity; importedProducts.Add(importedProduct); _context.Update(product); } order.ImportedProducts = importedProducts; _context.Add(order); await _context.SaveChangesAsync(); return(order); }