2011-05-02 38 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