public ActionResult Edit(TransactionEditViewModel model) { foreach (var modelStateValue in ModelState.Values) { foreach (var error in modelStateValue.Errors) { // Do something useful with these properties var errorMessage = error.ErrorMessage; var exception = error.Exception; } } var transaction = model.Transaction; var transactionItems = model.TransactionItems; db.Entry(transaction).State = EntityState.Modified; if (true) //(ModelState.IsValid) { foreach (var item in transactionItems) { //For this item, see if it already exists in the database var existingItem = db.TransactionItems .Where(x => x.TransactionItemId == item.TransactionItemId) .SingleOrDefault(); // Yes, item exists, so update scalar properties of child item if (existingItem != null) { var child = db.Entry(existingItem); child.CurrentValues.SetValues(item); } else //item is new { item.TransactionItemId = 0; db.Entry(transaction).Collection(x => x.TransactionItems).Load(); //db.Entry(transaction).Reference(x => x.TransactionItems).Load(); transaction.TransactionItems.Add(item); //I think this isn't right. This may blow up later. } } var totalPrice = CalculateTotalPrice(transactionItems); transaction.TotalPrice = totalPrice; //db.Entry(transaction).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } PopulateStoreDropdown(transaction.StoreId); return View(model); }
// // GET: /Transaction/Edit/5 public ActionResult Edit(int id = 0) { Transaction transaction = db.Transactions.Find(id);//.Include(x => x.StoreId).Where(y => y.TransactionId == id).Single(); //var transaction = db.Transactions.Include(x => x.TransactionItems).Where(y => y.TransactionId == id).Single(); var model = new TransactionEditViewModel(); model.Transaction = transaction; model.TransactionItems = transaction.TransactionItems; //db.TransactionItems.Where(x => x.TransactionId == id); if (transaction == null) { return HttpNotFound(); } //var storeQry = from s in db.Stores // orderby s.Name // select s; PopulateStoreDropdown(transaction.StoreId); return View(model); }