private void UpdateOrderUsingApplyCurrentValues_Click(object sender, EventArgs e) { var order = new Order { OrderId = Convert.ToInt32(OrderId.Text), Version = (byte[])OrderId.Tag, CustomerId = ((Customer)cmbCustomers.SelectedItem).CompanyId, OrderDate = DateTime.ParseExact(OrderDate.Text, "dd/MM/yyyy", null), ActualShippingDate = String.IsNullOrWhiteSpace(ActualShippindDate.Text) ? null : new DateTime?(DateTime.ParseExact(ActualShippindDate.Text, "dd/MM/yyyy", null)), EstimatedShippingDate = String.IsNullOrWhiteSpace(EstimatedShippingDate.Text) ? null : new DateTime?(DateTime.ParseExact(EstimatedShippingDate.Text, "dd/MM/yyyy", null)), ShippingAddress = new AddressInfo() { Address = ShippingAddress.Text, City = ShippingCity.Text, Country = ShippingCountry.Text, ZipCode = ShippingZipCode.Text } }; foreach (var item in Details.Items) { var listItem = (ListViewItem)item; var detail = new OrderDetail() { OrderDetailId = ((OrderDetail)listItem.Tag).OrderDetailId, ProductId = Convert.ToInt32(((OrderDetail)listItem.Tag).ProductId), Quantity = Convert.ToInt32(listItem.SubItems[1].Text), UnitPrice = Convert.ToDecimal(listItem.SubItems[2].Text), Discount = Convert.ToDecimal(listItem.SubItems[3].Text) }; order.OrderDetails.Add(detail); } using (var transaction = new TransactionScope()) { using (var ctx = new OrderITEntities()) { ctx.ExecuteStoreCommand("update product set availableitems = availableitems + od.Quantity from product p join [OrderDetail] od on od.ProductId = p.ProductId where od.orderid = {0}", 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(); ctx.Orders.ApplyCurrentValues(order); AddedDetails.ForEach(d => dbOrder.OrderDetails.Add(d)); RemovedDetails.ForEach(d => dbOrder.OrderDetails.Remove(d)); ModifiedDetails.ForEach(d => ctx.OrderDetails.ApplyCurrentValues(d)); ctx.SaveChanges(); ctx.ExecuteStoreCommand("update product set availableitems = availableitems - od.Quantity from product p join [OrderDetail] od on od.ProductId = p.ProductId where od.orderid = {0}", order.OrderId); } transaction.Complete(); } }
private void DeleteOrderConnected_Click(object sender, EventArgs e) { using (var transaction = new TransactionScope()) { using (var ctx = new OrderITEntities()) { ctx.ExecuteStoreCommand("update product set availableitems = availableitems + od.Quantity from product p join [OrderDetail] od on od.ProductId = p.ProductId where od.orderid = {0}", OrderId.Text); var order = ctx.Orders.First(o => o.OrderId == Convert.ToInt32(OrderId.Text)); ctx.Orders.DeleteObject(order); ctx.SaveChanges(); } transaction.Complete(); } }
private void CreateOrder_Click(object sender, EventArgs e) { using (var transaction = new TransactionScope()) { using (var ctx = new OrderITEntities()) { var order = new Order { CustomerId = ((Customer)cmbCustomers.SelectedItem).CompanyId, OrderDate = DateTime.Now.Date, ShippingAddress = new AddressInfo() { Address = ShippingAddress.Text, City = ShippingCity.Text, Country = ShippingCountry.Text, ZipCode = ShippingZipCode.Text } }; var r = new Random(); foreach (var item in Details.Items) { var listItem = (ListViewItem)item; var detail = new OrderDetail() { OrderDetailId = r.Next(), ProductId = Convert.ToInt32(((OrderDetail)listItem.Tag).ProductId), Quantity = Convert.ToInt32(listItem.SubItems[1].Text), UnitPrice = Convert.ToDecimal(listItem.SubItems[2].Text), Discount = Convert.ToDecimal(listItem.SubItems[3].Text) }; order.OrderDetails.Add(detail); } ctx.Orders.AddObject(order); ctx.SaveChanges(); ctx.ExecuteStoreCommand("update product set availableitems = availableitems - od.Quantity from product p join [OrderDetail] od on od.ProductId = p.ProductId where od.orderid = {0}", order.OrderId); MessageBox.Show("Order created with id " + order.OrderId); OrderId.Text = order.OrderId.ToString(); } transaction.Complete(); } }