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);
        }