Entity Framework 4.1 でのエンティティ オブジェクト参照の競合のトラブルシューティング
Entity Framework 4.1 で Employee
エンティティにリンクされた City
エンティティを保存すると、「エンティティ オブジェクトは IEntityChangeTracker の複数のインスタンスによって参照できません。」という例外がスローされる場合があります。これは通常、関連エンティティを追加するときに発生します。
この問題は、EmployeeService
クラスと CityService
クラスがコンテキストを管理する方法に起因します。 payrollDAO.AddToEmployee(e1);
内の EmployeeService
行が原因です。 ここで、e1
(Employee
エンティティ) は、city1
(リンクされた City
エンティティ) への参照をすでに保持しているコンテキストに追加されます。エンティティを複数のコンテキストに同時にアタッチできないため、競合が発生します。
解決策は、両方のサービスが同じコンテキストを共有するようにすることです。 これは 2 つの方法で実行できます:
1.依存関係の注入: コンテキストをサービス コンストラクターに注入:
<code class="language-csharp">EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context);</code>
これにより、両方のサービスが同じコンテキスト内で動作することが保証され、競合が防止されます。
2.統合サービス: EmployeeCityService
と Employee
エンティティの両方を管理する単一のサービス (たとえば、City
) を作成します。この単一のサービスは単一のコンテキストを使用するため、コンテキストの衝突の可能性が排除されます。 このアプローチにより、データの整合性が向上し、コンテキスト管理が簡素化されます。
以上がEntity Framework 4.1 の「エンティティ オブジェクトは IEntityChangeTracker の複数のインスタンスから参照できません」を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。