我正在抓取一個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();
這裏很難從你的代碼中知道;但它可能混合不同的DataContexts?我在你的代碼中看到更低級的[你看到的是一個新的]'ProjectDataContext'實例。你確定你用來返回你的'CartItem'的'ProjectDataContext'和你調用'SaveChanges'的是同一個嗎? – CodingGorilla
你在哪裏調用'SubmitChanges'?是由工具創建的實體類還是您手動編寫它們的實體類? –
@AndersAbel這是linq-to-sql,這些類通常由設計者生成(我不認爲你有任何其他選擇嗎?) – CodingGorilla