Я хватаю объект Cart, в котором есть коллекция объектов CartItem.У меня есть функция для добавления объекта CartItem к объекту Cart.Если я просто вызываю myCart.CartItems.Add (cartItem), он работает нормально.В случае, если товар уже существует в корзине, я просто хочу увеличить поле Количество, а не вставлять новую запись.Это не работает.Существующий объект CartItem обновляется, но вызов SubmitChanges для ProjectDataContext не сохраняет изменения.Ниже приведен код для моей функции AddItem.
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 с моей стороны.
Редактировать: Дополнительные пояснения.
Этот текст данных используется только для этого одного поиска.У объекта тележки есть свой, который отлично работает.Как я уже сказал, если я добавлю новый объект в список, он будет работать отлично, но редактирование существующего не сохранит в БД.Вот почему я так растерялся.
Я должен также отметить, что дополнительный 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();