防止實體框架 4.1 中的實體引用衝突
實體框架可能會拋出「實體物件無法被 IEntityChangeTracker 的多個實例引用」例外。當不同的上下文嘗試同時管理同一實體時,就會發生這種情況。 當保存具有從單獨上下文載入的相關物件的實體時,通常會發生這種情況。
問題:
想像一下單獨的服務,例如 EmployeeService
和 CityService
,每個服務都建立自己的實體框架上下文。如果 CityService
加載一個城市,並且 EmployeeService
隨後將同一城市添加給員工,則會出現衝突,因為該城市由兩個不同的上下文追蹤。
解:
關鍵是使用單一的共享上下文。 將此上下文注入兩個服務:
<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>
更優雅的解決方案可能是將相關實體合併到單一服務中。例如,建立 EmployeeService
,而不是 CityService
和 EmployeeCityService
。這簡化了上下文管理並防止衝突。
以上是如何防止 Entity Framework 4.1 中出現「實體物件不能被 IEntityChangeTracker 的多個實例引用」異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!