private static void SaveOrder(Common.IOrder order, PetStoreDbContext context, Customer customer)
        {
            var newOrder = new Order
            {
                CustomerId = (customer == null) ? order.CustomerId : customer.CustomerId,
                TotalCost  = order.TotalCost
            };

            context.Orders.Add(newOrder);

            context.SaveChanges();

            //now save the order details
            foreach (var detail in order.OrderDetails)
            {
                var orderDetail = new OrderDetail
                {
                    OrderId         = newOrder.OrderId,
                    ProductId       = detail.ProductId,
                    Quantity        = detail.Quantity,
                    ProductCategory = detail.ProductCategory,
                    ProductName     = detail.ProductName,
                    ProductPrice    = detail.ProductPrice
                };

                context.OrderDetails.Add(orderDetail);
            }

            context.SaveChanges();
        }
        public void Save(Common.IOrder order)
        {
            using (var context = new PetStoreDbContext())
            {
                using (var dbContextTransaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        //check if customer exists, if not, add them
                        Customer customer;
                        customer = context.Customers.FirstOrDefault(x => x.CustomerId == order.CustomerId);
                        if (customer == null)
                        {
                            var newCustomer = new Customer
                            {
                                CustomerId = order.CustomerId
                            };

                            context.Customers.Add(newCustomer);
                            context.SaveChanges();

                            SaveOrder(order, context, newCustomer);
                        }
                        else //customer already in the database
                        {
                            SaveOrder(order, context, customer);
                        }
                        dbContextTransaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        //Todo: implement some error handling here
                        dbContextTransaction.Rollback();
                    }
                }
            }
        }