2011-06-01 1 views
1

J'ai un bogue très bizarre, qui semble se produire uniquement sur un élément particulier que j'essaie de mettre à jour dans la base de données, en utilisant le framework d'entité.EF ne met pas à jour un objet particulier sur SaveChanges

Voici mon code:

var shoppingCartItem = GetShoppingCartItemById(shoppingCartItemId); 
shoppingCartItem.Quantity = newQuantity; 
_context.SaveChanges(); 

et c'est la méthode qui obtient l'élément de la DB avant updateing:

public ShoppingCartItem GetShoppingCartItemById(int shoppingCartItemId) 
     { 
      if (shoppingCartItemId == 0) 
       return null; 


      var query = from sci in _context.ShoppingCartItems 
         where sci.ShoppingCartItemId == shoppingCartItemId 
         select sci; 
      var shoppingCartItem = query.SingleOrDefault(); 
      return shoppingCartItem; 
     } 

Ce code fonctionne sur certains points, mais ne pas un particulier que je suis en train de tester maintenant. Si je vérifie l'état de l'objet (en utilisant _context.ObjectStateManager.GetObjectStateEntry (shoppingCartItem)) après avoir changé la propriété, la quantité est inchangée :(

Est-ce que cela arrive à l'un d'entre vous?

+1

Etes-vous sûr qu'une nouvelle valeur de quantité est différente? –

Répondre

0

J'ai rencontré un problème similaire lors du passage de l'objet de données à une vue, puis je l'ai récupéré - dans ce cas, il casse le lien vers le datacontext, mais cela ne devrait pas se produire dans ce cas. EntityState à Modifié et ré-attachant cela a fonctionné pour moi, il peut être utile d'essayer pour vous

var shoppingCartItem = GetShoppingCartItemById(shoppingCartItemId); 
shoppingCartItem.Quantity = newQuantity; 


_context.Entry(shoppingCartItem).State = System.Data.EntityState.Modified; 

_context.SaveChanges(); 

Notez cependant que cela ne fonctionne qu'avec EF4.1 - J'ai dû mettre à jour à 4.1 juste pour obtenir un moyen facile de modifier les éléments!

+0

le lien vers le contexte n'est pas rompu, sinon GetObjectStateEntry signalerait détaché, pas inchangé. Pour l'enregistrement, –

+0

, vous pouvez marquer un objet comme sale dans n'importe quelle vesion EF: _context.ObjectStateManager.ChangeObjectState (object, System.Data.EntityState.Modified); –

Questions connexes