我有父對象和子對象。如果我做以下操作插入後的延遲加載屬性
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
爲什麼這樣做?如果我得到一個新的上下文(保存後),我可以看到父母很好。
我有父對象和子對象。如果我做以下操作插入後的延遲加載屬性
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
爲什麼這樣做?如果我得到一個新的上下文(保存後),我可以看到父母很好。
我想你正在啓用延遲加載。如果你想與外鍵屬性的情況下添加對象後,該導航屬性被填充,你必須使用DbSet
的Create
方法(而不是實例與new
對象):
Child c = context.Child.Create();
在主動延遲加載這將創建一個代理對象,確保導航屬性被加載。
這解釋了爲什麼當我讀到的所有內容都顯示它應該正常工作時,我無法導航到任何父級導航屬性。謝謝。 – AdamH 2012-04-19 22:23:49
@Slauma這很好,謝謝。但是如果我的Child對象有一個具有所需值的構造函數,我該如何使用Create()方法?例如通常我會做Child c = new Child(OtherObject o)。顯然context.Child.Create(o)不起作用。 – Jordan 2013-07-08 17:30:59
@Jordan:這是不可能的。 'Create'只能通過默認的構造函數實例化一個實體。你必須在調用'Create'後設置實體屬性(或者調用類似於你傳遞參數的'Init'方法)。 – Slauma 2013-07-08 17:57:02
您是先使用EF 4.1代碼嗎? – Eranga 2011-06-10 23:28:27
不。我們使用EF,但不是先編碼。 – user472292 2011-06-12 18:23:15
可能的重複[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