请帮我解决以下问题。我有一个班级,比如
public class TopicItem
{
public TopicItem()
{
_children = new List<TopicItem>();
}
public int Id { get; set; }
public string Title { get; set; }
public int? ParentId { get; set; }
public TopicItem Parent { get; set; }
public List<TopicItem> Children { get; set; }
}
和流利
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TopicItem>().HasKey(t => t.Id);
modelBuilder.Entity<TopicItem>().Property(t => t.Title).IsRequired();
modelBuilder.Entity<TopicItem>().Property(t => t.Alias);
modelBuilder.Entity<TopicItem>().HasOptional(t => t.Parent).WithMany(t => t.Children).HasForeignKey(t => t.ParentId);
//modelBuilder.Entity<TopicItem>().HasMany(t => t.Children).WithOptional(t => t.Parent).HasForeignKey(t => t.ParentId);
base.OnModelCreating(modelBuilder);
}
但它不起作用。我试着按如下方式使用它:
public void Recursion(List<TopicItem> items)
{
if (items != null)
{
foreach (var item in items)
{
Process(item);
}
Recursion(item.Children);
}
}
Recursion(MyContext.TopicItems.Where(t => t.Parent == null).ToList())
但每个父实体的children属性为null。
是否可以这样做?
答案 0 :(得分:2)
您必须同时使Parent
和Children
virtual
支持延迟加载(它可以触发对数据库的大量查询),或者您必须明确告诉EF加载子项急切的装载。急切加载的问题在于它不能递归地工作,它只会加载与告诉EF一样多的级别。
EF及其查询机制不太适合递归关系(树结构)。