1

我目前正在使用EF 4.1 Code First的應用程序,並且有關於如何使用另一個上下文中的子對象保存新對象的問題。上下文以請求模式存儲。保存具有不同上下文的子對象的對象

我創建了一個名爲'空缺'的新對象。然後提示用戶將位置添加到空缺的位置集合中。這些位置是通過上下文拉取的,我最好避免將添加到空缺的位置保存回數據庫,直到用戶完成後可能會發生多次回發。

問題是位置來自不再存在的上下文,因此試圖保存我的空位會引發錯誤。

我確定這是一個常見問題,我希望有一個很好的方法來處理這個問題。

親切的問候,

回答

0

您必須分離你想存儲(可能在會議)多個請求中每一個實體。

context.Entry(loadedEntity).State = EntityState.Detached; 

你應該也能夠完全避免這種情況,如果你關閉代理創建爲這些實體的負載並將其加載爲沒有跟蹤。

context.Configuration.ProxyCreationEnabled = false; // This should generally be enough 
var loadedEntity = context.Entities.AsNoTracking().FirstOrDefault(...); 

要知道,在保存過程中,你將不得不告訴這些實體被重新正確設置自己的狀態,否則EF會嘗試再次插入現有的EF。

+0

我有相當多的表格,只是存儲半靜態信息。狀態類型,位置,貨幣等等,其中一些可能是EF支持它時的枚舉。這些是從靜態服務類返回的:'GetAllLocations()'和類似的。如果我在此方法中分離返回的對象並將其中一些或全部添加到新創建的對象,那麼在保存父對象時必須手動附加所有子對象以避免重複輸入? – Drauka

+0

是的,你將不得不處理。這就是以這種方式使用EF的成本。 –

+0

嗯,也許我應該閱讀並理解你的整個答案,然後再發表評論,因爲這正是你所說的。 – Drauka

相關問題