Résoudre le problème des « objets d'entité sont référencés par plusieurs instances IEntityChangeTracker » dans Entity Framework 4.1
Lors de l'enregistrement d'une entité contenant une référence d'entité à l'aide d'Entity Framework 4.1, vous pouvez rencontrer l'exception « L'objet d'entité ADO.Net Entity Framework ne peut pas être référencé par plusieurs instances de IEntityChangeTracker. » Cette exception se produit généralement lorsque plusieurs contextes Entity Framework gèrent la même entité.
Par exemple, dans l'extrait de code, les deux classes de service EmployeeService
et CityService
créent respectivement leurs propres instances de contexte. Lorsqu'une entité city1
est récupérée de CityService
, elle est attachée au contexte de CityService
. Plus tard, lorsque l'entité employé e1
est créée et que sa référence est attribuée à city1
, les deux entités sont ajoutées au contexte de EmployeeService
.
En conséquence, city1
est attaché à deux contextes différents, provoquant l'exception.
Solution :
Méthode 1 : Utiliser un seul contexte
Créez une seule instance de contexte et injectez-la dans deux classes de service EmployeeService
et CityService
:
<code class="language-csharp">var context = new YourDbContext(); // 创建单例上下文 EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context); // 使用相同的上下文实例</code>
Méthode 2 : Fusionner les services
Consolidez les entités associées en un seul service, qui est responsable de toutes les interactions entre les entités. Cette approche simplifie la manipulation des relations entre les entités.
Avec la méthode ci-dessus, vous pouvez éviter l'exception « L'objet entité ne peut pas être référencé par plusieurs instances de IEntityChangeTracker » et enregistrer avec succès l'entité contenant la référence d'entité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!