問題
在調用 DbSet 的 Attach() 方法時(與將 Entity 設置爲 EntityState.Unchanged 狀態等價)報告如下錯誤:
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
緣由
實體對象的 DbContext 還沒關閉,此時不容許再 Attach 到另外一個 DbContext 上。
Attach 的實體對象,必須是脫離 DbContext 的管制。
解決方法
方法一:先關閉作查詢的 DbContext,再 Attach 到作更新的 DbContext 中。
方法二:將只用於查詢的 DbContext 中的 DbSet 對象繼續調用 AsNoTracking() 方法,這樣獲取的實體就不會被追蹤,而後再將查詢出的實體添加到另外一個要執行 Command 操做的 DbContext 上下文中。這種方法在使用 EntityFramework 的進行讀寫分離的架構中用處比較大。
參考文章: