我正在使用MVC2,我正在关注MvcMusicStore的教程。问题是总数不会在数据库的Orders表中更新。每当我从网站订购某些东西然后进入数据库时,Total
字段仍然显示为0.00。有没有人想到这一点。以下是代码:
public int CreateOrder(Order order)
{
decimal totalOrder = GetTotal();
var cartItems = GetCartItems();
//Iterate the items in the cart, adding Order Details for each
foreach (var cartItem in cartItems)
{
var orderDetails = new OrderDetail
{
ProductId = cartItem.ProductId,
OrderId = order.OrderId,
UnitPrice = cartItem.Product.Price,
Quantity = cartItem.Count
};
cricket_Model.OrderDetails.AddObject(orderDetails);
totalOrder = (cartItem.Count * cartItem.Product.Price);
}
// Set the order's total to the orderTotal count
order.Total = totalOrder;
//Save the order
cricket_Model.SaveChanges();
//Empty the shopping cart
EmptyCart();
//Return the OrderId as a confirmation number
return order.OrderId;
}
我只是想说OrderDetails
表中的所有内容都会更新,Order
表中的所有内容都会更新,但Total
字段除外。
答案 0 :(得分:2)
我不是PERSISTENCE的专家。但这一次让我的毛囊发痒了两个小时。解决这个问题的方法与@Ben Pretorius
一致//Save Order
storeDB.Orders.Add(order);
storeDB.SaveChanges();
//Process the order
var cart = ShoppingCart.GetCart(this.HttpContext);
cart.CreateOrder(order);
//! ADD THIS METHOD TO PERSIST DATA AGAIN! And your Total will Update.
storeDB.SaveChanges();
虽然我们在ShoppingCart的CreateOrder方法中保存数据库,但它仍然具有 Order 属性作为空项。
当您将页面的上下文返回到 AddressAndPayement ActionResult时,购物车的订单属性已完成。因此,当您在控制器中保存到数据库时,它会保存订单总数。
我仍然试图让它从方法中更新。其他人有更好的主意吗?
答案 1 :(得分:1)
这也让我的脑子发痒!我正在使用MVC3并发现自己正在编写一个基于本教程的自定义电子商务系统,因为我是MVC3的新手。我遇到了同样的问题,它更新了我的订单表和订单明细表,但没有更新订单表的总列。
我提出的解决方案如下:
在 CheckoutController.cs 中进行以下更改并在CreateCard(订单)之后添加 storeDB.SaveChanges(); ;以下示例的方法:
// POST: /Checkout/AddressAndPayment
[HttpPost]
public ActionResult AddressAndPayment(FormCollection values)
{
var order = new Order();
TryUpdateModel(order);
try
{
if (string.Equals(values["PromoCode"], PromoCode,
StringComparison.OrdinalIgnoreCase) == false)
{
return View(order);
}
else
{
order.Username = User.Identity.Name;
order.OrderDate = DateTime.Now;
//Save Order
storeDB.Orders.Add(order);
storeDB.SaveChanges();
//Process the order
var cart = ShoppingCart.GetCart(this.HttpContext);
cart.CreateOrder(order);
//! ADD THIS METHOD TO PERSIST DATA AGAIN! And your Total will Update.
storeDB.SaveChanges();
return RedirectToAction("Complete",
new { id = order.OrderId });
}
}
catch
{
//Invalid - redisplay with errors
return View(order);
}
}
这似乎有点Dodgy / Strange ....如果我在ShoppingCartModel内的SaveChanges中添加一个断点,那么它也会保留Data但是如果你检查DB Afterwards它仍然显示总数为Null ...以上然而,代码修复了问题......
答案 2 :(得分:0)
totalOrder应该是(注意 + = )循环,
totalOrder += (cartItem.Count * cartItem.Product.Price);
此外,您似乎没有保存totalOrder属于数据库的更改。因为您没有向我们展示定义totalOrder的位置,所以很难说清楚。