2011-06-10 121 views
4

我有父對象和子對象。如果我做以下操作插入後的延遲加載屬性

Child c = new Child(); 

c.ParentID = parentID; 
context.Child.Add(c); 
context.SaveChanges(); 

int i = c.Parent.ParentID; // throws an exception b/c Parent is null 

爲什麼這樣做?如果我得到一個新的上下文(保存後),我可以看到父母很好。

+0

您是先使用EF 4.1代碼嗎? – Eranga 2011-06-10 23:28:27

+0

不。我們使用EF,但不是先編碼。 – user472292 2011-06-12 18:23:15

+0

可能的重複[Entity Framework:我設置外鍵,SaveChanges然後訪問導航屬性,但它不加載相關的實體。爲什麼不?](http://stackoverflow.com/questions/15552891/entity-framework-i-set-the-foreign-key-savechanges-then-access-the-navigation) – 2014-05-07 12:45:58

回答

9

我想你正在啓用延遲加載。如果你想與外鍵屬性的情況下添加對象後,該導航屬性被填充,你必須使用DbSetCreate方法(而不是實例與new對象):

Child c = context.Child.Create(); 

在主動延遲加載這將創建一個代理對象,確保導航屬性被加載。

+0

這解釋了爲什麼當我讀到的所有內容都顯示它應該正常工作時,我無法導航到任何父級導航屬性。謝謝。 – AdamH 2012-04-19 22:23:49

+0

@Slauma這很好,謝謝。但是如果我的Child對象有一個具有所需值的構造函數,我該如何使用Create()方法?例如通常我會做Child c = new Child(OtherObject o)。顯然context.Child.Create(o)不起作用。 – Jordan 2013-07-08 17:30:59

+0

@Jordan:這是不可能的。 'Create'只能通過默認的構造函數實例化一個實體。你必須在調用'Create'後設置實體屬性(或者調用類似於你傳遞參數的'Init'方法)。 – Slauma 2013-07-08 17:57:02