C # Entity Framework “Un object d’entité ne peut pas être référencé par plusieurs instances de IEntityChangeTracker”

Cette erreur est fréquente mais je ne trouve pas la solution. Je suis nouveau dans Entity Framework et lors de ma première approche, j’ai eu cette erreur.

C’est ce que j’ai. J’ai une classe d’entreprise et une classe de twig. Les deux classes ont leur propre référentiel. Une entreprise a une succursale, alors qu’une succursale peut avoir plusieurs entresockets.

Dans mon interface graphique, je remplis une liste déroulante avec des objects Branch, que je reçois de mon BranchRepository:

public IList GetAllBranches() { var query = _context.Branches; IList twigs = query.ToList(); return twigs; } 

Ceci est result est la source de données de la liste déroulante de twig.

Lorsque je veux sauver l’entreprise, je fais quelque chose comme ceci:

 company.VisitorAddress = txtVisitAddress.Text; company.City = txtCity.Text; company.CompanyName = txtCompany.Text; company.PhoneNumber = txtPhoneNumber.Text; company.ZipCode = txtZipcode.Text; company.Branch = ((Branch)cmbBranches.SelectedItem); company.Website = txtWebsite.Text; 

Ensuite, j’appelle le référentiel de mon entreprise pour sauver mon entreprise. Voici à quoi ressemble la méthode de sauvegarde:

 public bool Save(Company company) { _context.AddToCompanies(company); // <-- This is where the error is thrown. _context.SaveChanges(); return true; } 

Lorsque la méthode save est appelée, le message d’erreur suivant s’affiche: «Un object d’entité ne peut pas être référencé par plusieurs instances de IEntityChangeTracker».

Clairement, je fais quelque chose de mal, mais quoi?

Créez-vous une nouvelle instance ObjectContext pour chacun de vos référentiels? Cela peut être source de problème car, lorsque vous ajoutez Branche à Company, cette dernière tente de l’append à l’instance ObjectContext , ce qui est impossible car elle est toujours liée à l’instance ObjectContext utilisée pour remplir la liste déroulante. La solution consiste à partager l’instance ObjectContext entre vos référentiels. Une autre possibilité consiste à Detach twig du premier référentiel, mais cela peut avoir d’autres conséquences.