示例#1
0
文件: Program.cs 项目: kimx/Examples
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SalesContext>());

            using (var context = new SalesContext())
            {
                Customer customer = new Customer
                {
                    Name = "Michael Tsai"
                };
                context.Customers.Add(customer);
                context.SaveChanges();

                Console.WriteLine(context.Customers.First().Name);
            }

            //BankAccount wallet = new BankAccount
            //{
            //    Balance = 100
            //};

        }
        private void newSaleButton_Click(object sender, EventArgs e)
        {
            var personId = (int)peopleComboBox.SelectedValue;
            var regionId = (int)regionComboBox.SelectedValue;

            var sale = new Sale
            {
                Amount   = newAmountNumericUpDown.Value,
                Date     = newDateDateTimePicker.Value,
                PersonId = personId,
                RegionId = regionId
            };

            using (var context = new SalesContext())
            {
                context.Sales.Add(sale);
                var result = context.SaveChanges();

                MessageBox.Show(string.Format("{0} sales created.", result));
            }

            GetSales();
        }
        private void salesDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 1)
            {
                var salesId = (int)salesDataGridView.Rows[e.RowIndex].Cells[0].Value;
                var amount  = (decimal)salesDataGridView.Rows[e.RowIndex].Cells[1].Value;

                using (var context = new SalesContext())
                {
                    var sale = context.Sales.SingleOrDefault(p => p.Id == salesId);

                    if (sale != null)
                    {
                        sale.Amount = amount;
                        var result = context.SaveChanges();

                        MessageBox.Show(string.Format("{0} sales created.", result));

                        GetSales();
                    }
                }
            }
        }
示例#4
0
        public override async Task Add(Sale sale)
        {
            var transaction = _context.Database.BeginTransaction();

            var product = _context.Products.Find(sale.ProductId);

            if (product == null || product.QuantityOnHand <= 0)
            {
                throw new NotSupportedException("Product is not available");
            }

            try {
                product.QuantityOnHand -= 1;
                _context.SaveChanges();
                sale.SalesDate = DateTimeOffset.Now;
                await _entities.AddAsync(sale);

                await transaction.CommitAsync();
            } catch {
                await transaction.RollbackAsync();

                throw new Exception("Sale could not be added");
            }
        }
示例#5
0
        private void SalesdataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            if (MessageBox.Show("Are  you sure you want to delete this sale?", "Delete",
                                MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
            {
                e.Cancel = true;
                return;
            }
            var SalesId = (int)e.Row.Cells[0].Value;


            using (var context = new SalesContext())
            {
                var sale = context.Sales.SingleOrDefault(p => p.Id == SalesId);

                if (sale != null)
                {
                    context.Sales.Remove(sale);
                    var result = context.SaveChanges();

                    MessageBox.Show(string.Format("{0} sales deleted", result));
                }
            }
        }
示例#6
0
        public JsonResult Save(SalesOrderViewModel _salesOrderViewModel)
        {
            SalesOrder salesOrder = new SalesOrder();

            salesOrder.SalesOrderId = _salesOrderViewModel.SalesOrderId;
            salesOrder.CustomerName = _salesOrderViewModel.CustomerName;
            salesOrder.PONumber     = _salesOrderViewModel.PONumber;
            salesOrder.ObjectState  = _salesOrderViewModel.ObjectState;

            _salesContext.SalesOrders.Attach(salesOrder);
            _salesContext.ChangeTracker.Entries <IObjectWithState>().Single().State = Helper.ConvertState(salesOrder.ObjectState);
            _salesContext.SaveChanges();

            if (salesOrder.ObjectState == ObjectState.Deleted)
            {
                return(Json(new { newLocation = "/Sales/Index/" }));
            }

            _salesOrderViewModel.MessageToClient = string.Format("{0}'s sales order has been added", salesOrder.CustomerName);

            _salesOrderViewModel.SalesOrderId = salesOrder.SalesOrderId;
            _salesOrderViewModel.ObjectState  = ObjectState.Unchanged;
            return(Json(new { _salesOrderViewModel }));
        }
示例#7
0
        private void SalesDataGridView_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            if (MessageBox.Show("Delete sale?", "Delete", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                e.Cancel = true;
                return;
            }

            var salesId = (int)e.Row.Cells[0].Value;

            var personnId = (int)peopleComboBox.SelectedValue;

            using (var context = new SalesContext())
            {
                var sale = context.Sales
                           .SingleOrDefault(s => s.Id == salesId);
                if (sale != null)
                {
                    context.Sales.Remove(sale);
                    var result = context.SaveChanges();
                    MessageBox.Show($"{result} sales deleted.");
                }
            }
        }
        //Actualizar - Modificar
        public static bool Actualizar(Customer customer)
        {
            bool exito = true;

            try
            {
                using (var data = new SalesContext())
                {
                    var customerNow = Obtener(customer.Id);
                    customerNow.FirstName = customer.FirstName;
                    customerNow.LastName  = customer.LastName;
                    customerNow.City      = customer.City;
                    customerNow.Country   = customer.Country;
                    customer.Phone        = customer.Phone;

                    data.SaveChanges();
                }
            }
            catch (Exception)
            {
                exito = false;
            }
            return(exito);
        }
示例#9
0
        public void TestSalesContextNoEmpty()
        {
            /* ================== Montando Cenario =================== */
            var options = new DbContextOptionsBuilder <SalesContext>()
                          .UseInMemoryDatabase(databaseName: "ConnectionTest").Options;

            /* ================== Execucao =================== */
            using (var ctx = new SalesContext(options))
            {
                ctx.Sellers.Add(new Domain.Models.Seller {
                    Id = 1, FirstName = "Sergio", LastName = "Murillo"
                });
                ctx.SaveChanges();

                /* ================== Verificacao =================== */

                // Testando com Assert
                //Assert.NotEmpty(ctx.Sellers.ToList());

                // Testando com FluentAssertions
                ctx.Sellers.ToList().Should().BeEmpty(ctx.Sellers.ToList().ToString(),
                                                      $"O objeto esperado não corresponde com ao objeto obtido ({ctx.Sellers.ToList().ToString()})");
            }
        }
示例#10
0
 public void Insert(Seller obj)
 {
     _context.Add(obj);
     _context.SaveChanges();
 }
示例#11
0
        public JsonResult Save(SalesOrderViewModel salesOrderViewModel)
        {
            if (!ModelState.IsValid)
            {
                throw new ModelStateException(ModelState);
            }

            SalesOrder salesOrder = ViewModelHelpers.CreateSalesOrderFromSalesOrderViewModel(salesOrderViewModel);

            _salesContext.SalesOrders.Attach(salesOrder);

            if (salesOrder.ObjectState == ObjectState.Deleted)
            {
                //if deleting the order, must set all children to also be deleted
                foreach (var itemViewModel in salesOrder.Items)
                {
                    var item = _salesContext.SalesOrderItems.Find(itemViewModel.Id);
                    if (item != null)
                    {
                        item.ObjectState = ObjectState.Deleted;
                    }
                }
            }
            else
            {
                //check to see if the client deleted any items in the order
                foreach (var itemIdToDelete in salesOrderViewModel.ItemsToDelete)
                {
                    //retrieve item to be deleted
                    SalesOrderItem item = _salesContext.SalesOrderItems.Find(itemIdToDelete);
                    if (item != null)
                    {
                        item.ObjectState = ObjectState.Deleted;
                    }
                }
            }

            _salesContext.ApplyStateChanges();
            string msgToClient = string.Empty;

            try
            {
                _salesContext.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                msgToClient = "Another user has modified this sales order since you began looking at it. Your changes have not been applied and your screen has been updated with the current values.";
            }
            catch (Exception ex)
            {
                throw new ModelStateException(ex);
            }

            if (salesOrder.ObjectState == ObjectState.Deleted)
            {
                //when deleting, do not return a view, tell the client to go to the Index instead
                //(we will program the client to look for this anonymous object)
                return(Json(new { newLocation = "/Sales/Index/" }));
            }

            //only assign msg here if no other msg assigned yet
            if (string.IsNullOrWhiteSpace(msgToClient))
            {
                msgToClient = ViewModelHelpers.GetMessageToClient(
                    salesOrderViewModel.ObjectState, salesOrderViewModel.CustomerName);
            }


            //save a copy of the id
            salesOrderViewModel.Id = salesOrder.Id;
            //dispose context to refresh data (someone else may have changed data)
            _salesContext.Dispose();
            _salesContext = new SalesContext();
            //refresh with latest data
            salesOrder = _salesContext.SalesOrders.Find(salesOrderViewModel.Id);

            salesOrderViewModel = ViewModelHelpers.CreateSalesOrderViewModelFromSalesOrder(salesOrder);
            salesOrderViewModel.MessageToClient = msgToClient;

            //return anonymous JSON object, not view model directly
            return(Json(new { salesOrderViewModel }));
        }
示例#12
0
 public void Insert(Seller seller)
 {
     _context.Add(seller);
     _context.SaveChanges();
 }
示例#13
0
 public ActionResult Create(Customer Cust)
 {
     objContext.Customers.Add(Cust);
     objContext.SaveChanges();
     return(RedirectToAction("Index"));
 }
 public void Add(Invoice item)
 {
     item.Status = Status.Pending;
     _context.Invoices.Add(item);
     _context.SaveChanges();
 }
示例#15
0
 public async Task <Category> Insert(Category ca)
 {
     _dbContext.Categories.Add(ca);
     _dbContext.SaveChanges();
     return(ca);
 }
示例#16
0
 public void SaveContext()
 {
     salesContext.SaveChanges();
 }
示例#17
0
        protected override void Seed(SalesContext context)
        {
            context.Products.AddOrUpdate(
                p => p.Name,
                new Product {
                Name = "CocaCola", Quantity = 100, Price = 1.78m,
            },
                new Product {
                Name = "Fant", Quantity = 50, Price = 1.79m,
            },
                new Product {
                Name = "Victory", Quantity = 67, Price = 2.8m,
            },
                new Product {
                Name = "Milka", Quantity = 10, Price = 0.8m,
            });
            context.SaveChanges();

            context.Customers.AddOrUpdate(
                c => c.CreditCardNumber,
                new Customer {
                Name = "Ivan", Email = "*****@*****.**", CreditCardNumber = "456789098"
            },
                new Customer {
                Name = "Maira", Email = "*****@*****.**", CreditCardNumber = "123434676"
            },
                new Customer {
                Name = "Pesho", Email = "*****@*****.**", CreditCardNumber = "455468678"
            },
                new Customer {
                Name = "Sasho", Email = "*****@*****.**", CreditCardNumber = "84322145"
            });
            context.SaveChanges();

            context.StoresLocation.AddOrUpdate(
                s => s.LocationName,
                new StoreLocation {
                LocationName = "Sofia"
            },
                new StoreLocation {
                LocationName = "Plovdiv"
            },
                new StoreLocation {
                LocationName = "Varna"
            },
                new StoreLocation {
                LocationName = "Burgas"
            });
            context.SaveChanges();

            if (!context.Sales.Any())
            {
                context.Sales.AddOrUpdate(
                    s => s.Id,
                    new Sale {
                    ProductId = 1, CustomerId = 1, StoreLocationId = 2, Date = new DateTime(2016, 01, 01)
                },
                    new Sale {
                    ProductId = 2, CustomerId = 4, StoreLocationId = 1, Date = new DateTime(2016, 05, 11)
                },
                    new Sale {
                    ProductId = 3, CustomerId = 3, StoreLocationId = 3, Date = new DateTime(2016, 11, 06)
                },
                    new Sale {
                    ProductId = 4, CustomerId = 2, StoreLocationId = 4, Date = new DateTime(2016, 02, 09)
                });
                context.SaveChanges();
            }

            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //
        }
示例#18
0
 public void AddSale(Sale sale)
 {
     _salesContext.Add(sale);
     _salesContext.SaveChanges();
 }
示例#19
0
        public JsonResult Save(SalesOrderViewModel vm)
        {
            if (ModelState.IsValid == false)
            {
                throw new ModelStateException(ModelState);
            }
            SalesOrder salesOrder = AppHelpers.CreateSalesOrderFromSalesOrderViewModel(vm);

            _salesContext.SalesOrders.Attach(salesOrder);

            if (salesOrder.ObjectState == ObjectState.Deleted)
            {
                foreach (SalesOrderItemViewModel orderItem in vm.SalesOrderItems)
                {
                    SalesOrderItem itemToDelete = _salesContext.SalesOrderItems.Find(orderItem.Id);
                    if (itemToDelete != null)
                    {
                        itemToDelete.ObjectState = ObjectState.Deleted;
                    }
                }
            }
            else
            {
                foreach (int itemId in vm.SalesOrderItemsToDelete)
                {
                    SalesOrderItem itemToDelete = _salesContext.SalesOrderItems.Find(itemId);
                    if (itemToDelete != null)
                    {
                        itemToDelete.ObjectState = ObjectState.Deleted;
                    }
                }
            }

            _salesContext.ApplyStateChanges();// .ChangeTracker.Entries<IObjectWithState>().Single().State = Helpers.ConvertState(salesOrder.ObjectState);

            string messageToClient = string.Empty;

            try
            {
                _salesContext.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                messageToClient = "Someone else have modified this sales order since you retrieved it.  Your changes have not been applied.  What you see now are the current values in the database.";
            }
            catch (Exception ex)
            {
                throw new ModelStateException(ex);
            }

            if (vm.ObjectState == ObjectState.Deleted)
            {
                return(Json(new { newLocation = "/Sales/Index/" }));
            }

            if (string.IsNullOrWhiteSpace(messageToClient))
            {
                messageToClient = AppHelpers.GetMessageToClient(vm.ObjectState, salesOrder.CustomerName, salesOrder.Id);
            }

            vm.Id = salesOrder.Id;
            _salesContext.Dispose();
            _salesContext = new SalesContext();
            salesOrder    = _salesContext.SalesOrders.Find(vm.Id);

            vm = AppHelpers.CreateSalesOrderViewModelFromSalesOrder(salesOrder); //.SalesOrderId = salesOrder.SalesOrderId;
            vm.MessageToClient = messageToClient;

            return(Json(new { salesOrderViewModel = vm }));
        }
示例#20
0
        protected override void Seed(SalesContext context)
        {
            //  This method will be called after migrating to the latest version.

            // Products
            context.Products.AddOrUpdate(p => p.Name,
                                         new Product()
            {
                Name     = "Tesla",
                Quantity = 1,
                Price    = 100000m
            },
                                         new Product()
            {
                Name     = "Samsung Galaxy S7",
                Quantity = 1,
                Price    = 1500m
            },
                                         new Product()
            {
                Name     = "Book",
                Quantity = 1,
                Price    = 25m
            },
                                         new Product()
            {
                Name     = "Lenovo Y50 Laptop",
                Quantity = 1,
                Price    = 2500m
            }, new Product()
            {
                Name     = "Concert Alex Penda",
                Quantity = 1,
                Price    = 100m
            });

            // Customers

            // Uncomment for Problems 3, 4, 5
            // Disable for Problem 6 !
            //context.Customers.AddOrUpdate(c => c.Email,
            //    new Customer()
            //    {
            //        Name = "Tom",
            //        Email = "*****@*****.**",
            //        CreditCardNumber = "123456789123456"
            //    },
            //    new Customer()
            //    {
            //        Name = "Tea",
            //        Email = "*****@*****.**",
            //        CreditCardNumber = "789456123111111"
            //    },
            //    new Customer()
            //    {
            //        Name = "Nia",
            //        Email = "*****@*****.**",
            //        CreditCardNumber = "777888999111222"
            //    },
            //    new Customer()
            //    {
            //        Name = "Ralph",
            //        Email = "*****@*****.**",
            //        CreditCardNumber = "666666666666666"
            //    },
            //    new Customer()
            //    {
            //        Name = "Steve",
            //        Email = "*****@*****.**",
            //        CreditCardNumber = "4444455555556666"
            //    });

            // Uncomment for Problem 6
            context.Customers.AddOrUpdate(c => c.Email,
                                          new Customer()
            {
                FirstName        = "Tom",
                LastName         = "Edvards",
                Email            = "*****@*****.**",
                CreditCardNumber = "123456789123456"
            },
                                          new Customer()
            {
                FirstName        = "Tea",
                LastName         = "Nielsen",
                Email            = "*****@*****.**",
                CreditCardNumber = "789456123111111"
            },
                                          new Customer()
            {
                FirstName        = "Nia",
                LastName         = "Barnes",
                Email            = "*****@*****.**",
                CreditCardNumber = "777888999111222"
            },
                                          new Customer()
            {
                FirstName        = "Ralph",
                LastName         = "Finnes",
                Email            = "*****@*****.**",
                CreditCardNumber = "666666666666666"
            },
                                          new Customer()
            {
                FirstName        = "Steve",
                LastName         = "Jobs",
                Email            = "*****@*****.**",
                CreditCardNumber = "4444455555556666"
            });

            // StoreLocations
            context.StoreLocations.AddOrUpdate(l => l.LocationName,
                                               new StoreLocation()
            {
                LocationName = "Sofia"
            },
                                               new StoreLocation()
            {
                LocationName = "Lisboa"
            },
                                               new StoreLocation()
            {
                LocationName = "Barcelona"
            },
                                               new StoreLocation()
            {
                LocationName = "Munchen"
            },
                                               new StoreLocation()
            {
                LocationName = "Rotterdam"
            });

            context.SaveChanges();

            // Sales
            context.Sales.AddOrUpdate(s => s.Id,
                                      new Sale()
            {
                Product       = context.Products.FirstOrDefault(p => p.Name.StartsWith("Tesla")),
                Customer      = context.Customers.FirstOrDefault(c => c.Email.StartsWith("steve")),
                Date          = DateTime.Now,
                StoreLocation = context.StoreLocations.FirstOrDefault(l => l.LocationName == "Sofia")
            },
                                      new Sale()
            {
                Product       = context.Products.FirstOrDefault(p => p.Name.StartsWith("Samsung")),
                Customer      = context.Customers.FirstOrDefault(c => c.Email.StartsWith("ralph")),
                Date          = DateTime.Now,
                StoreLocation = context.StoreLocations.FirstOrDefault(l => l.LocationName == "Lisboa")
            },
                                      new Sale()
            {
                Product       = context.Products.FirstOrDefault(p => p.Name.StartsWith("Book")),
                Customer      = context.Customers.FirstOrDefault(c => c.Email.StartsWith("nia")),
                Date          = DateTime.Now,
                StoreLocation = context.StoreLocations.FirstOrDefault(l => l.LocationName == "Barcelona")
            },
                                      new Sale()
            {
                Product       = context.Products.FirstOrDefault(p => p.Name.StartsWith("Lenovo")),
                Customer      = context.Customers.FirstOrDefault(c => c.Email.StartsWith("tea")),
                Date          = DateTime.Now,
                StoreLocation = context.StoreLocations.FirstOrDefault(l => l.LocationName == "Rotterdam")
            },
                                      new Sale()
            {
                Product       = context.Products.FirstOrDefault(p => p.Name.StartsWith("Concert")),
                Customer      = context.Customers.FirstOrDefault(c => c.Email.StartsWith("tom")),
                Date          = DateTime.Now,
                StoreLocation = context.StoreLocations.FirstOrDefault(l => l.LocationName == "Munchen")
            });

            base.Seed(context);
        }
示例#21
0
        private void buttonUpdate_Click(object sender, EventArgs e)
        {
            int userID = 0;

            if (userView.Rows.Count > 0)
            {
                userView.Rows[userView.CurrentCell.RowIndex].Selected = true;
                if (userView.SelectedRows[0].Cells[0].Value != DBNull.Value)
                {
                    userID = (Int32)userView.SelectedRows[0].Cells[0].Value;
                }
                var newUser  = stx.Customers.First(c => c.Id == userID);
                var thisUser = userView.SelectedRows;
                foreach (DataGridViewRow cell in thisUser)
                {
                    if (string.IsNullOrEmpty(cell.Cells[1].Value.ToString()))
                    {
                        MessageBox.Show("enter a first Name");
                    }
                    else
                    {
                        newUser.FirstName = cell.Cells[1].Value.ToString();
                    }
                    if (string.IsNullOrEmpty(cell.Cells[2].Value.ToString()))
                    {
                        MessageBox.Show("enter a last Name");
                    }
                    else
                    {
                        newUser.LastName = cell.Cells[2].Value.ToString();
                    }
                    if (string.IsNullOrEmpty(cell.Cells[3].Value.ToString()))
                    {
                        newUser.City = null;
                    }
                    else
                    {
                        newUser.City = cell.Cells[3].Value.ToString();
                    }
                    if (string.IsNullOrEmpty(cell.Cells[4].Value.ToString()))
                    {
                        newUser.Country = null;
                    }
                    else
                    {
                        newUser.Country = cell.Cells[4].Value.ToString();
                    }
                    if (string.IsNullOrEmpty(cell.Cells[5].Value.ToString()))
                    {
                        newUser.Phone = null;
                    }
                    else
                    {
                        newUser.Phone = cell.Cells[5].Value.ToString();
                    }
                }
                stx.SaveChanges();
                getUsers();
            }
            else
            {
                MessageBox.Show("to update a row please search then select a row");
            }
        }
示例#22
0
 public ActionResult Create(Order ord)
 {
     objContext.Orders.Add(ord);
     objContext.SaveChanges();
     return(RedirectToAction("Index"));
 }
示例#23
0
 public void Save()
 {
     _salesContext.SaveChanges();
 }
        static void Main()
        {
            SalesContext contex = new SalesContext();

            contex.SaveChanges();
        }
示例#25
0
        public async Task Consume(ConsumeContext <SubmitOrderCommand> context)
        {
            _logger.LogInformation($"Processing order for customer '{context.Message.CustomerId}'.");

            var customer = await _dataService.GetCustomerAsync(context.Message.CustomerId);

            if (customer == null)
            {
                // probably we want to log this
                _logger.LogWarning($"Submitted invalid order for customer {context.Message.CustomerId}. No such customer");

                return;
            }

            var products = await _dataService.GetProductsAsync();

            var order = new Order()
            {
                CustomerId = context.Message.CustomerId, Status = OrderStatus.Submitted
            };

            double total = 0.0;

            foreach (var item in context.Message.Items)
            {
                var product = products.FirstOrDefault(t => t.ProductId == item.ProductId);
                if (product != null)
                {
                    total += item.Quantity * product.Price;
                    order.Items.Add(new OrderItem()
                    {
                        ProductId = item.ProductId, Quantity = item.Quantity, Name = product.Name, Price = product.Price
                    });
                }
            }

            // Business rule
            if (total > 100)
            {
                total = total * .9; // 10% off
                _logger.LogInformation($"Applying bonus for customer {customer.CustomerId} for the total amount of {total}");
            }
            order.Total = total;

            _salesContext.Orders.Add(order);
            _salesContext.SaveChanges();

            _logger.LogInformation($"Created order {order.OrderId} for customer {customer.CustomerId} for the total amount of {order.Total}");

            await context.Publish(new OrderSubmittedEvent()
            {
                CorrelationId = context.Message.CorrelationId,
                CustomerId    = customer.CustomerId,
                OrderId       = order.OrderId,
                Total         = order.Total,
                Products      = order.Items.Select(t => new SubmittedOrderItem()
                {
                    ProductId = t.ProductId, Quantity = t.Quantity
                }).ToArray()
            });
        }
示例#26
0
        public async Task Consume(ConsumeContext <SubmitOrderCommand> context)
        {
            _logger.LogInformation($"正在处理顾客 '{context.Message.CustomerId}' 的订单");

            var customer = await _dataService.GetCustomerAsync(context.Message.CustomerId);

            if (customer == null)
            {
                // probably we want to log this
                _logger.LogWarning($"来自顾客 {context.Message.CustomerId} 的订单不正确,系统中不存在这个顾客");

                return;
            }

            var products = await _dataService.GetProductsAsync();

            var order = new Order()
            {
                CustomerId = context.Message.CustomerId, Status = OrderStatus.Submitted
            };

            double total = 0.0;

            foreach (var item in context.Message.Items)
            {
                var product = products.FirstOrDefault(t => t.ProductId == item.ProductId);
                if (product != null)
                {
                    total += item.Quantity * product.Price;
                    order.Items.Add(new OrderItem()
                    {
                        ProductId = item.ProductId, Quantity = item.Quantity, Name = product.Name, Price = product.Price
                    });
                }
            }

            // Business rule
            if (total > 100)
            {
                total = total * .9; // 10% off
                _logger.LogInformation($"为顾客 {customer.CustomerId} 的订单使用折扣后,总金额为 {total}");
            }
            order.Total = total;

            _salesContext.Orders.Add(order);
            _salesContext.SaveChanges();

            _logger.LogInformation($"已创建顾客 {customer.CustomerId} 的新订单,订单号为 {order.OrderId},总金额 {order.Total}");

            await context.Publish(new OrderSubmittedEvent()
            {
                CorrelationId = context.Message.CorrelationId,
                CustomerId    = customer.CustomerId,
                OrderId       = order.OrderId,
                Total         = order.Total,
                Products      = order.Items.Select(t => new SubmittedOrderItem()
                {
                    ProductId = t.ProductId, Quantity = t.Quantity
                }).ToArray()
            });
        }
 public void SaveChanges()
 {
     _context.SaveChanges();
 }
示例#28
0
        public JsonResult Save(SalesOrderViewModel salesOrderViewModel)
        {
            SalesOrder salesOrder = SalesOrderHelper.CreateSalesOrderFromSalesOrderViewModel(salesOrderViewModel);

            salesOrder.ObjectState = salesOrderViewModel.ObjectState;


            //instead of hard coding salesOrder as an add, attach it instead
            _salesContext.SalesOrders.Attach(salesOrder);

            //Check to see if objectstate for the salesorder is delete
            if (salesOrder.ObjectState == ObjectState.Deleted)
            {
                //Loop through all the salesorderitems in the view model and set their object state to deleted
                foreach (SalesOrderItemViewModel salesOrderItemViewModel in salesOrderViewModel.SalesOrderItems)
                {
                    SalesOrderItem salesOrderItem =
                        _salesContext.SalesOrderItems.Find(salesOrderItemViewModel.SalesOrderItemId);
                    if (salesOrderItem != null)
                    {
                        salesOrderItem.ObjectState = ObjectState.Deleted;
                    }
                }
            }
            else
            {
                //This will loop through the SalesOrderItems marked for deleting on the client,
                //find the corresponding record in the context and set it to be deleted in EF
                foreach (int salesOrderItemId in salesOrderViewModel.SalesOrderItemsToDelete)
                {
                    SalesOrderItem salesOrderItem = _salesContext.SalesOrderItems.Find(salesOrderItemId);
                    if (salesOrderItem != null)
                    {
                        salesOrderItem.ObjectState = ObjectState.Deleted;
                    }
                }
            }

            //Then you want to tell the change tracker to set the state that was returned from the helper method
            //created in the SolutionName.Model
            //_salesContext.ChangeTracker.Entries<IObjectWithState>().Single().State =
            //    Helpers.ConvertState(salesOrder.ObjectState);
            _salesContext.ApplyStateChanges();
            _salesContext.SaveChanges();

            //Since when an item is deleted we don't want to return a aview the
            //Delete will return a anonymous Json object that will return a single property called new laoction
            //whose value is the controller action for displaying the list of sales orders.
            if (salesOrder.ObjectState == ObjectState.Deleted)
            {
                //This will be returned to the view we don't want to stay on we we need a way for the view
                //to redirect to the sales order list which is /Sales/Index.  See line 34 in salesorderviewmodel.js
                return(Json(new { newLocation = "/Sales/Index/" }));
            }


            string messageToClient = SalesOrderHelper.GetMessageToClient(salesOrderViewModel.ObjectState,
                                                                         salesOrderViewModel.CustomerName);

            //If a record is inserted the context is synced with the ID but that is never communicated back to the client
            //so the SalesOrderId needs to be set with the value returned from the DB
            //salesOrderViewModel.SalesOrderId = salesOrder.SalesOrderId;
            salesOrderViewModel = ViewModels.SalesOrderHelper.CreateSalesOrderViewModelFromSalesOrder(salesOrder);
            salesOrderViewModel.MessageToClient = messageToClient;

            //to make the Json object as flexible enough for all our needs we will send back an annoymous object
            //that contains whatever we need to send to the client and then let the client insepct the contents to
            //determine what to do with it
            return(Json(new { salesOrderViewModel }));
        }