/*IOrderService Interface*/
 public int CreateOrder(OrderIT.Model.Order order)
 {
     using (var ctx = new OrderIT.Model.OrderITEntities())
     {
         ctx.Orders.AddObject(order);
         ctx.SaveChanges();
         return(order.OrderId);
     }
 }
 public void DeleteOrder(int orderId, byte[] version)
 {
     using (var ctx = new OrderIT.Model.OrderITEntities()) {
         var order = new OrderIT.Model.Order {
             OrderId = orderId, Version = version
         };
         ctx.Orders.Attach(order);
         ctx.Orders.DeleteObject(order);
         ctx.SaveChanges();
     }
 }
 public void UpdateOrder(OrderIT.Model.Order order)
 {
     using (var ctx = new OrderIT.Model.OrderITEntities()) {
         ctx.ContextOptions.ProxyCreationEnabled   = false;
         order.OrderDetails.ForEach(d => d.OrderId = order.OrderId);
         var dbOrder         = ctx.Orders.Include("OrderDetails").First(o => o.OrderId == order.OrderId);
         var AddedDetails    = order.OrderDetails.Except(dbOrder.OrderDetails).ToList();
         var RemovedDetails  = dbOrder.OrderDetails.Except(order.OrderDetails).ToList();
         var ModifiedDetails = dbOrder.OrderDetails.Intersect(order.OrderDetails).ToList();
         dbOrder.ShippingAddress = order.ShippingAddress;
         dbOrder.Version         = order.Version;
         AddedDetails.ForEach(d => dbOrder.OrderDetails.Add(d));
         RemovedDetails.ForEach(d => ctx.OrderDetails.DeleteObject(d));
         ModifiedDetails.ForEach(d => ctx.OrderDetails.ApplyCurrentValues(d));
         ctx.SaveChanges();
     }
 }