2010-12-07 7 views
2

J'utilise Entity Framework 4.Ajout d'objet à la collection de propriétés de navigation crée une nouvelle entité

J'essaie d'associer une nouvelle entité à une entité existante. Le système finit par créer une nouvelle entité enfant alors qu'en fait je veux simplement ajouter une référence à l'objet enfant au parent.

Il existe une relation plusieurs à plusieurs entre les deux entités, donc je ne peux pas simplement définir la propriété FK de l'entité parente. J'ai essayé parent.ChildCollection.Add (enfant) qui crée simplement un nouvel objet enfant dans la base de données. C'est ce que j'essaie d'éviter.

Je dois faire quelque chose qui ne va pas.

grâce

exemple de code mis à jour

Exemple de code

pour mes autovirants-entités que je dois faire côté client En ce moment, j'ai quelque chose comme ça pour tous les enfants de serveur boucle puis jusqu'à trouver celui que je veux, puis l'ajouter à la collection d'objets

  List<Service.Child> childs = _client.GetChildren(); 

Je dois boucle à travers cette collection pour trouver le bon d'ajouter à la pa collection rent.childs ie.

  List<Service.Child> childList = new List<Service.Child>(); 
      foreach (Service.Child child in childList) { 
       if (child.ChildId == childId) 
        childList.Add(child); 
      } 
      contact.Childs = childList; 

Répondre

1

Si une entité est venu à l'origine de la base de données et a ses propres propriétés EntityKey peuplées, en utilisant Ajouter pour le relier à une autre entité changera son EntityState à Ajouté. Même s'il s'agit d'une entité préexistante, SaveChanges crée une commande d'insertion pour cette entité. Vous devriez envisager d'utiliser à la place Attach:

parent.ChildCollection.Attach(child); 

Utilisation de la méthode attach, vous pouvez définir les relations entre les entités qui ont déjà existent dans le ObjectContext, mais qui ne sont pas connectés automatiquement.

+0

J'utilise des entités auto-suivi (je ne sais pas comment cela peut affecter vos commentaires) ... mais oui j'essaie actuellement à la fois parent.ChildCollection.Attach (enfant) ainsi que child.ParentCollection.Attach (parent) Dans les deux cas, EF ajoute toujours de nouveaux objets/lignes enfants à la base de données. Cela m'a vraiment bloqué. – David

+0

Pouvez-vous poster votre code s'il vous plaît? Si vous utilisez STE, Attacher n'existe même pas sur ChildCollection puisqu'il est de type 'TrackableCollection ', donc je ne suis pas sûr de ce que vous faites exactement là-dedans. –

+0

voir l'exemple de code ci-dessus – David

Questions connexes