LINQ to SQL не обновляет дочерний элемент - PullRequest
0 голосов
/ 14 октября 2011

Я хватаю объект 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();

1 Ответ

0 голосов
/ 14 октября 2011

Я был глуп.У меня была функция в классе Cart для извлечения корзины на основе идентификатора, и я забыл удалить новый DataContext в этой функции.Извините за трату времени всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...