在MvcMusicStore教程中没有更新数据库? MVC2

时间:2011-05-02 14:19:23

标签: c# asp.net-mvc-2

我正在使用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字段除外。

3 个答案:

答案 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的位置,所以很难说清楚。