Entity Framework 4.1 のトラブルシューティング: 「エンティティ オブジェクトは IEntityChangeTracker の複数のインスタンスから参照できません」
このエラーは通常、複数の Entity Framework コンテキストを使用して関係を持つエンティティ (Employee
にリンクされた City
など) を保存するときに発生します。 これは、異なるサービスまたはリポジトリが同じエンティティを個別に管理する場合によく発生します。
問題: 複数のサービス (例: EmployeeService
、CityService
) がそれぞれ独自の Entity Framework コンテキストを作成するため、同じエンティティが複数の IEntityChangeTracker
インスタンスによって追跡されます。
解決策:
この競合を解決するための効果的な戦略は次のとおりです:
集中コンテキスト: 各サービス内に新しいコンテキストを作成する代わりに、サービスの外部に単一の共有コンテキストを作成します。
依存関係の注入: この共有コンテキストをサービスのコンストラクター (EmployeeService
、CityService
) に注入します。これにより、すべてが同じコンテキストで動作することが保証されます。 例:
<code class="language-csharp">var context = new MyDbContext(); // Create the context once EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context);</code>
EmployeeCityService
と Employee
エンティティの両方を処理する単一のサービス (例: City
) を作成することを検討してください。このアプローチにより、複数のコンテキストの可能性が完全に排除されます。ベスト プラクティス: 関連エンティティの単一コンテキスト
関連エンティティを操作する場合、異なるサービスに対して個別のコンテキストを使用しないことがベスト プラクティスです。 単一のコンテキストにより、一貫したエンティティ追跡が保証され、「複数の IEntityChangeTracker
インスタンス」エラーが防止されます。 これによりコードが簡素化され、潜在的なデータの不整合が回避されます。
以上がEntity Framework 4.1 の「エンティティ オブジェクトは IEntityChangeTracker の複数のインスタンスから参照できません」を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。