0

我在想,如果有任何的方式來實現這樣的使用EF4:一個孩子添加到父實體,而無需加載完整的孩子的圖形

我想這樣做:

1. | 'Get Parent 
2. | Dim Parent as oParent = mContext.GetParent(parentId) 
3. | 
4. | 'Link a child without loading it entirely, only using his ID 
5. | oParent.Children.AddOnlyUsingChildId(aChildId) 'Or maybe EntityKey? 
6. | 
8. | 'Apply Changes (Save) 
7. | mContext.SaveChanges() 

所有這是因爲,我不想每次都向服務器發出請求以獲取整個子實體,無論如何,我只有孩子的ID(來自checkboxlist)。這是循環的一部分,在一個循環中,可能必須爲每個第一級循環加載數百個孩子。在我看來,可以這樣做,因爲Entity Graph應該知道,在保存父項和關係時,他應該只在子映射表中插入'Parrent.nId和Child.nId'和父母......所以它不應該需要整個孩子的圖。

對嗎? 這可能嗎?

+0

您可能會發現一些幫助實體分裂:http://stackoverflow.com/questions/10236723/how-do-i-prevent-entity-framework-from-loading-a- filestream-column-into-a-byte-a –

回答

2

您可以通過創建「存根實體」並將其附加到上下文來完成此操作。例如用C#語法:

var child = new Child { ID = aChildId }; 
mContext.Children.Attach(child); 
oParent.Children.Add(child); 
+0

那麼,非常簡單的finaly。謝謝@Slauma。我會嘗試類似的東西; 'mContext.Attach(child);'但嘗試時會出錯......但以您的方式,這是行得通的。再次感謝。 –

+0

任何機會,一個側面的問題,你知道是否有辦法知道一個孩子的收藏是否已經改變(新的孩子或什麼的)? –

+0

@SimonDugré:我認爲只是查詢數據庫並將原始集合與視圖中的集合進行比較。 – Slauma

相關問題