排查 Entity Framework 4.1 中的實體物件參考衝突
在 Entity Framework 4.1 中儲存連結到 Employee
實體的 City
實體有時會引發例外:「實體物件不能被 IEntityChangeTracker 的多個實例引用。」這通常發生在新增相關實體時。
問題源自於 EmployeeService
和 CityService
類別如何管理其上下文。 payrollDAO.AddToEmployee(e1);
中的 EmployeeService
行是罪魁禍首。 此處,e1
(Employee
實體)被加入到已持有對 city1
(連結的 City
實體)引用的上下文中。這會產生衝突,因為一個實體無法同時附加到多個上下文。
解決方案是確保兩個服務共享相同的上下文。 這可以透過兩種方式完成:
1。依賴注入: 將上下文注入到服務建構函式中:
EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context);
這可確保兩個服務在同一上下文中運行,從而防止衝突。
2。合併服務: 建立單一服務,例如 EmployeeCityService
,以管理 Employee
和 City
實體。此單一服務將使用單一上下文,從而消除了上下文衝突的可能性。 這種方法可以提高資料完整性並簡化上下文管理。
以上是如何解決 Entity Framework 4.1 中的「實體物件不能被 IEntityChangeTracker 的多個實例引用」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!