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

时间:2013-07-26 06:24:24

标签: 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; }
}

我为TreeNode类添加了以下配置

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

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

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

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

更新:向导航属性添加虚拟修改器无效

1 个答案:

答案 0 :(得分:8)

将属性标记为virtual,如@Cuong所示。这将启用延迟加载(每次您尝试访问子项时,将执行对服务器的其他查询):

public virtual IList<TreeNode> Children { get; set; }

或者在加载父级时加载子项:

var nodes = context.TreeNodes.Include(n => n.Children);