2011-05-02 58 views
0

我使用的是MVC2,我正在关注MvcMusicStore上的教程。问题是总数不在数据库的Orders表中更新。每次我从网站订购一些东西,然后进入数据库时​​,Total字段仍然表示0.00。有没有人知道这一点。下面是代码:MvcMusicStore教程中的数据库上的总数未更新? MVC2

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; 
} 

我只想说,在Order表除了Total领域OrderDetails表,一切一切的更新更新。

+0

它在调试模式下显示totalOrder值吗?使用.SaveChanges()方法或totalOrder本身是否为0.00? – Priyank 2011-05-02 15:09:35

回答

0

totalOrder应为(注意+ =)在循环,

totalOrder += (cartItem.Count * cartItem.Product.Price); 

此外,它似乎并不像要保存的更改totalOrder是到数据库的一部分。因为您没有向我们展示totalOrder的定义,所以很难说清楚。

1

这让我的大脑发痒!我正在使用MVC3,并发现自己正在编写基于本教程的自定义电子商务系统,因为我是MVC3的新手。我遇到了同样的问题,它更新我的订单表以及订单明细表,但不是订单表的总列。

我想出了解决办法如下:

里面你CheckoutController.cs做出如下因素的变化,并添加storeDB.SaveChanges();经过CreateCard(订单)后的;方法按照下面的例子:

// 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); 
     } 
    } 

这似乎有点狡猾/奇怪....如果我断点添加到ShoppingCartModel内的SaveChanges那么它也坚持数据,但如果你检查DB之后仍然显示总数为空...上面的代码可以解决问题...

2

我不是专家在持久性。但是这个让我的毛囊发痒了两个小时。周围的工作对于作为被张贴@Ben利乌斯

//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(); 

虽然我们保存在CreateOrder法DB中的购物,它仍然有订购属性为空项。

而当您返回页面的上下文中AddressAndPayement的ActionResult,该的Order属性是完整的。因此,当您在控制器中对数据库进行保存时,它会保存订单总计。

我仍然试图让它从内部的方法更新。其他人有更好的主意?

+0

有谁知道为什么你必须调用storeDB.SaveChanges();第二次(创建订单总共3次!)?需要专家的回答,如果这确实是处理这种情况的正确方法。 – PussInBoots 2013-05-05 11:19:52