EF Code First.对于父级,子集合为空

los*_*man 7 entity-framework ef-code-first

我在开发树层次结构时遇到了Entity Framework Code First方法的问题.

我需要在数据库中存储一些树.我的表有三个字段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; }
}
Run Code Online (Sandbox Code Playgroud)

我为TreeNode类添加了以下配置

            modelBuilder.Entity<TreeNode>().HasOptional(c => c.Parent)
                    .WithMany(c => c.Children)
                    .Map(m => m.MapKey("Parent_Id"));
Run Code Online (Sandbox Code Playgroud)

问题是EF返回时,Children始终为null.

但是如果检索一些子节点,通过Parent属性获取其Parent节点,则正确填充Children属性.

我不确定这里有什么问题.寻找你的建议.

更新:向导航属性添加虚拟修改器没有帮助

Ser*_*kiy 10

virtual像@Cuong建议的那样将属性标记为.这将启用延迟加载(每次当您尝试访问子项时,将执行对服务器的附加查询):

public virtual IList<TreeNode> Children { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者在加载父级时急切加载子级:

var nodes = context.TreeNodes.Include(n => n.Children);
Run Code Online (Sandbox Code Playgroud)