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