Je saisis un objet Cart, qui contient une collection d'objets CartItem. J'ai une fonction pour ajouter un objet CartItem à l'objet Cart. Si j'appelle simplement myCart.CartItems.Add (cartItem), cela fonctionne très bien. Dans le cas où l'article existe déjà dans le panier, je veux simplement incrémenter le champ Quantité, plutôt que d'insérer un nouvel enregistrement. Cela ne fonctionne pas. L'objet CartItem existant est mis à jour, mais l'appel de SubmitChanges sur ProjectDataContext n'enregistre pas la modification. Voici le code de ma fonction AddItem.LINQ to SQL ne met pas à jour l'élément enfant
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;
}
}
L'objet panier est fixé au ProjectDataContext correctement, car il ajoutera des objets CartItem sans problème. Cela ne mettra pas à jour ceux qui existent déjà. Je suppose que c'est juste un malentendu trivial de LINQ à SQL de ma part.
Modifier: Plus de précisions.
Ce datacontext est uniquement utilisé pour cette extraction. L'objet panier a son propre qui fonctionne bien. Comme je l'ai dit, si j'ajoute un nouvel objet à la liste, cela fonctionne parfaitement, mais l'édition d'un objet existant ne sera pas sauvegardée dans la base de données. Voilà pourquoi je suis si confus.
Je devrais également noter que ProjectDataContext supplémentaire ci-dessous n'est jamais réellement frappé en raison de l'instruction if, donc je sais que cela n'interfère pas non plus.
Ajouté
Voici le code qui appelle cette fonction, y compris le 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();
Il est difficile de dire à partir de votre code ici; mais est-ce possible que vous mélangez différents DataContexts? Je vois plus bas dans votre code que vous obtenez [ce qui semble être une nouvelle] instance de votre 'ProjectDataContext'. Êtes-vous sûr que 'ProjectDataContext' que vous avez utilisé pour renvoyer votre' CartItem' est le même que vous appelez 'SaveChanges'? – CodingGorilla
Où appelez-vous 'SubmitChanges'? Les classes d'entités sont-elles créées par un outil ou les avez-vous écrites manuellement? –
@AndersAbel Ceci est linq-à-sql, les classes sont généralement générées par le concepteur (je ne pense pas que vous avez d'autres options que vous?) – CodingGorilla