2009-07-24 5 views
2

J'essaie de comprendre comment associer une entité avec une entité associée à un nouveau contexte lorsque je souhaite mettre à jour l'entité.attacher une entité avec une entité associée à un contexte de nouvelle structure d'entité

J'ai une table Person (Generalized to Personnel), qui a un champ LanguageID. Ce champ est lié en tant que FK via l'EF à une autre table Langue avec LanguageID en tant que clé primaire (1-M). J'ai besoin de mettre à jour une préférence de langue particulière, cependant, la relation semble rester liée à l'ancien contexte car j'obtiens une erreur "L'objet ne peut pas être référencé par plusieurs instances d'IEntityChangeTracker" sur la ligne indiquée ci-dessous. Y at-il un moyen d'attacher l'entité Language au nouveau contexte en tant que relation de l'entité Personnel (Personne) ???

Les entités ne sont pas détachés dans la méthode orginal GetPersonnel() qui utilise une méthode .include() pour renvoyer le preferredLanguage

preferredLanguage est le nom NavigationProperty sur la table de personne ...

public static void UpdateUser(Personnel originalUser, Personnel newUser) 
    { 
     using (AdminModel TheModel = new AdminModel()) 
     { 

      ((IEntityWithChangeTracker)originalUser).SetChangeTracker(null); 
      ((IEntityWithChangeTracker)originalUser.PreferredLanguage).SetChangeTracker(null); 

      TheModel.Attach(originalUser);--Error Line 
      TheModel.ApplyPropertyChanges("Person", newUser); 

      TheModel.SaveChanges(); 
     } 
    } 
Merci

Sean

Répondre

1

Pour éviter ce genre de problèmes que vous devriez faire GetPersonnel() faire une requête NoTracking.

I.e.

ctx.Person.MergeOption = MergeOption.NoTracking; 
// and then query as per normal. 

De cette façon, vous pouvez obtenir un graphique des entités connectées (en supposant que vous utilisez .Include()) qui est pas attaché. Notez que cela ne fonctionnera pas si vous essayez de détacher manuellement des entités, parce que cela schreds votre graphique.

Hope this helps

Alex

Questions connexes