6
我在開發樹層次結構時遇到實體框架代碼優先的問題。EF代碼優先。子集合對於父項爲空
我需要在數據庫中存儲一些樹。我的表有三個字段Id,Name和Parent_Id。 我創造了我的解決方案如下類:
public class TreeNode
{
public TreeNode()
{
Children = new List<TreeNode>();
}
public int Id { get; set; }
[Required]
public String Name { get; set; }
public virtual IList<TreeNode> Children { get; set; }
public virtual TreeNode Parent { get; set; }
}
我已經添加了以下配置樹節點類
modelBuilder.Entity<TreeNode>().HasOptional(c => c.Parent)
.WithMany(c => c.Children)
.Map(m => m.MapKey("Parent_Id"));
的問題是,當通過EF返回兒童總是空。
但是,如果檢索某個子節點,通過Parent屬性獲取其父節點,則Children屬性將被正確填充。
我不確定這裏有什麼問題。尋找你的建議。
更新:除了虛擬修飾符的導航性能沒有幫助
感謝這將使延遲加載(每次當你將嘗試訪問兒童更多的查詢服務器將執行)。即使使用虛擬屬性兒童也不會被退回。 – lostaman
@lostaman確保上下文啓用延遲加載'context.Configuration.LazyLoadingEnabled = true;' –
Thanks @lazyberezovsky。我有這個選項設置爲false。我將它更改爲true,現在我收到一條錯誤消息:「嘗試訪問Children集合時,已經有一個與此命令關聯的打開的DataReader,它必須先關閉」。 – lostaman