2010-07-26 2 views
0

J'ai été creuser dans les messages ici et sur google et n'a pas pu trouver quelque chose qui m'aide à résoudre un problème que j'ai à sauver des entités enfants sur une entité existante. Disons que j'ai un panier qui contiendra des articles, ce qui signifie que j'ai une entité ShoppingCart qui a la collection d'entités ShoppingCartItem.Entity Framework un à plusieurs relation enregistrer problème

Dans mon contrôleur, je vérifie si le ShoppingCart existe et récupère l'entité s'il y en a une. Sinon, c'est une nouvelle entité (Entitystate est marqué comme ajouté). Ensuite, je continue en ajoutant des éléments à la collection déjà existante (si des éléments sont déjà là) Mon problème maintenant est seulement quand je sauvegarde les modifications à un ShoppingCart déjà créé: Il ajoute un nouveau panier dans la base de données avec Ainsi, si j'ai un panier et deux enfants et que j'ajoute maintenant 3 nouveaux articles, je me retrouve avec 2 entrées ShoppingCart dans la table ShoppingCart et 7 entrées ShoppingCartItem.

J'ai tracé le code et, l'entité ShoppingCart est marquée comme ajoutée dès qu'un nouveau ShoppingCartItem est ajouté en utilisant AddObject() ...

Comment puis-je empêcher cela?

Merci beaucoup,

Stéphan

Répondre

1

La solution la plus simple est de retreive la ShoppingCart existante avec des entités de détail, puis de ne pas effectuer des appels addObject. Appelez la méthode SaveChanges() à la place, cela va écrire les changements à la base de données sans créer une nouvelle entité ShoppingCart.

+0

Salut Devart, Je l'ai finalement réussi en redessinant la façon dont les choses ont été construites. Je crée d'abord le panier, sans aucun article car je devrai le sauvegarder quand même, j'attribue l'identifiant ShoppingCart du nouveau panier à chaque article que je veux créer et voilà! Si je veux ajouter de nouveaux objets, la création du panier est simplement ignorée et tout fonctionne comme un charme et est plus séparé! Mais je vais essayer votre suggestion dans un projet de test pour voir si ce serait une technique utile plus tard pour d'autres choses! Merci beaucoup! –

Questions connexes