Entity Framework 4.1 でのエンティティ参照の競合の防止
Entity Framework は、「エンティティ オブジェクトは IEntityChangeTracker の複数のインスタンスから参照できません」という例外をスローする場合があります。これは、異なるコンテキストが同じエンティティを同時に管理しようとすると発生します。 これは通常、別のコンテキストから読み込まれた関連オブジェクトを含むエンティティを保存するときに発生します。
問題:
それぞれが独自の Entity Framework コンテキストを作成する、EmployeeService
や CityService
などの個別のサービスを想像してください。 CityService
が都市をロードし、後で EmployeeService
がその同じ都市を従業員に追加すると、都市は 2 つの異なるコンテキストによって追跡されるため、競合が発生します。
解決策:
重要なのは、単一の共有コンテキストを使用することです。 このコンテキストを両方のサービスに挿入します:
<code class="language-csharp">var context = new YourDbContext(); // Create the context once EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context); // Both services use the same context</code>
より洗練された解決策は、関連するエンティティを 1 つのサービスに統合することです。たとえば、EmployeeService
と CityService
の代わりに EmployeeCityService
を作成します。これにより、コンテキスト管理が簡素化され、競合が防止されます。
以上がEntity Framework 4.1 での「IEntityChangeTracker の複数のインスタンスからエンティティ オブジェクトを参照することはできません」という例外を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。