2011-08-29 63 views

回答

1

據我所知,該行

Repository.Properties.AddObject(P); 

試圖將檢體P添加到當前庫中,並且因爲你從不同的存儲庫得到它你需要將其刪除(或將其從另一個存儲庫中分離出來)。編輯:所以我假設在倉庫的某個地方,有一個包裝的DataContext(或者也許Repository繼承你的DataContext。當你從一個DataContext獲得一個對象時,這個對象不斷被一個變化跟蹤器引用,如果您更新該對象需要將數據發送回數據庫因爲您不希望對任何對象進行重複計數,所以EF會阻止您一次將該對象附加到多個數據上下文。該對象到一個新的數據上下文,你需要分離它從已追蹤它的DataContext。

要做到這一點,你需要調用對象的分開方法,它引用是任何對象還由EF跟蹤。如何做到這一點的一個很好的例子是:http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx

+0

(DataLayer.IAccrualRepository)存儲庫是一個接口,它具有一個IObjectSet 屬性。但如何從存儲庫中刪除它,因爲我沒有任何直接連接到實體對象。 –

+0

然後你可能沒有正確的抽象。如果您無法查看實體集合,則可能需要創建一個新對象並複製其所有屬性。 Automapper是很好的:http://automapper.codeplex.com –

+0

嘗試不同的方式foreach(屬性P中的屬性) { AccrualTrackingEntities DataContext = new AccrualTrackingEntities(); DataContext.Detach(P); DataContext.Properties.AddObject(P); DataContext.SaveChanges(); }但它表示它不存在於對象狀態管理器中。 –

相關問題