我在开发树层次结构时遇到了实体框架代码优先方法的问题。
我需要在数据库中存储一些树。我的表有三个字段 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 属性获取其父节点,然后正确填充 Children 属性。
我不确定这里有什么问题。寻求您的建议。
更新:向导航属性添加虚拟修饰符没有帮助