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)