public Order CreateOrder(Order entity) { var header = new Order(); using (var transaction = Uow.GetTransaction()) { try { header.CustomerID = entity.CustomerID; header.EmployeeID = entity.EmployeeID; header.OrderDate = entity.OrderDate; header.RequiredDate = entity.RequiredDate; header.ShipVia = entity.ShipVia; header.Freight = entity.Freight; header.ShipName = entity.ShipName; header.ShipAddress = entity.ShipAddress; header.ShipCity = entity.ShipCity; header.ShipRegion = entity.ShipRegion; header.ShipPostalCode = entity.ShipPostalCode; header.ShipCountry = entity.ShipCountry; Uow.OrderRepository.Add(header); Uow.CommitChanges(); foreach (var summary in entity.OrderSummaries) { var detail = new OrderDetail(); var product = Uow.ProductRepository.Get(new Product(summary.ProductID)); if (product == null) { throw new NullEntityException(String.Format("The product with ID : '{0}' is not exists in database.", detail.ProductID)); } if (product.Discontinued == true) { throw new DiscontinuedProductException(String.Format("The product with ID : '{0}' is discontinued.", product.ProductID)); } detail.OrderID = header.OrderID; detail.ProductID = summary.ProductID; detail.Quantity = summary.Quantity; detail.UnitPrice = product.UnitPrice; detail.Discount = (Single)summary.Discount; Uow.OrderDetailRepository.Add(detail); product.UnitsInStock -= detail.Quantity; product.UnitsOnOrder += detail.Quantity; Uow.ProductRepository.Update(product); } Uow.CommitChanges(); entity.OrderID = header.OrderID; transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw ex; } } return(header); }