2011-10-13 2 views
0

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(); 
+0

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

+0

Où appelez-vous 'SubmitChanges'? Les classes d'entités sont-elles créées par un outil ou les avez-vous écrites manuellement? –

+0

@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

Répondre

0

J'étais stupide. J'ai eu une fonction dans la classe Cart pour récupérer un panier basé sur id, et j'ai oublié de supprimer le nouveau DataContext dans cette fonction. Désolé de perdre du temps pour tout le monde.

Questions connexes