2011-10-13 97 views
0

我正在抓取一個Cart對象,它有一個CartItem對象的集合。我有一個將CartItem對象添加到Cart對象的函數。如果我只是簡單地調用myCart.CartItems.Add(cartItem),它可以正常工作。如果商品已經存在於購物車中,我只想增加數量字段,而不是插入新記錄。這不起作用。現有的CartItem對象被更新,但在ProjectDataContext上調用SubmitChanges不會保存更改。以下是我的AddItem函數的代碼。LINQ to SQL沒有更新子元素

public CartItem AddItem(CartItem cartItem) 
{ 
    CartItem existingCartItem = this.CartItems.Where(c => c.DealOptionId == cartItem.DealOptionId&& c.isGift == cartItem.isGift).FirstOrDefault(); 

    if (existingCartItem != null) 
    { 
     existingCartItem.Quantity += cartItem.Quantity; 
     return existingCartItem; 
    } 
    else 
    { 
     cartItem.CartId = this.CartId; 

     if (cartItem.Price == 0) 
     { 
      ProjectDataContext pdc = Connection.GetContext(); 
      DealOption dealOption = pdc.DealOptions.SingleOrDefault(d => d.Id == cartItem.DealOptionId); 
      cartItem.Price = dealOption.OfferPrice; 
     } 

     this.CartItems.Add(cartItem); 
     return cartItem; 
    } 
} 

Cart對象正確地連接到ProjectDataContext,因爲它會添加CartItem對象而不會出現問題。它只是不會更新現有的。我假設這只是我對LINQ to SQL的一個微不足道的誤解。

編輯:更多解釋。

datacontext僅用於該檢索。購物車對象有其自己的工作正常。就像我說的,如果我向列表中添加一個新對象,它可以很好地工作,但編輯現有對象不會保存到數據庫。這就是爲什麼我很困惑。

我還應該注意到,下面的附加ProjectDataContext從來沒有實際打過,因爲if語句,所以我知道這也不會干擾。

新增

下面是調用這個函數,包括ProjectDataContext

 ProjectDataContext pdc = Connection.GetContext(); 
     Model.Cart myCart = Model.Cart.GetCart(pdc); 
     CartItem cartItem = new CartItem(); 
     DealOptionRepository dor = new DealOptionRepository(pdc); 
     DealOption dealOption = dor.GetById(dealOptionId); 
     cartItem.DealOptionId = dealOptionId; 
     cartItem.DealId = dealOption.DealId; 
     cartItem.Price = Convert.ToDecimal(hdnPrice.Value); 

     cartItem.isGift = false; 
     cartItem.Quantity = Convert.ToInt32(ddlBFMQty.SelectedValue); 

     CartItem thisItem = myCart.AddItem(cartItem); 
     pdc.SubmitChanges(); 
+0

這裏很難從你的代碼中知道;但它可能混合不同的DataContexts?我在你的代碼中看到更低級的[你看到的是一個新的]'ProjectDataContext'實例。你確定你用來返回你的'CartItem'的'ProjectDataContext'和你調用'SaveChanges'的是同一個嗎? – CodingGorilla

+0

你在哪裏調用'SubmitChanges'?是由工具創建的實體類還是您手動編寫它們的實體類? –

+0

@AndersAbel這是linq-to-sql,這些類通常由設計者生成(我不認爲你有任何其他選擇嗎?) – CodingGorilla

回答

0

我是愚蠢的代碼。我有一個Cart類中的函數來檢索基於id的購物車,並且我忘記刪除該函數中的新的DataContext。對不起浪費大家時間。