我有这个实体:
public class DynamicPage {
public int PageId { get; set; }
public int Order { get; set; }
public string MenuText { get; set; }
public string MenuHover { get; set; }
public int? ParentId { get; set; }
public virtual DynamicPage Parent { get; set; }
public virtual ICollection<DynamicPage> Children { get; set; }
}
此实体可能有3个级别:父级 - &gt;孩子 - &gt;孙。如何加载所有关联子级(级别2)的父级(级别1)以及每个子级,关联孙级(级别3)(如果有)?感谢帮助。
答案 0 :(得分:10)
EF 4.1功能和语法:
var entity = context.Parents
.Include(p => p.Children.Select(c => c.GrandChildren))
.FirstOrDefault(p => p.Id == 1); // or whatever condition
答案 1 :(得分:0)
如果您希望让自己轻松生活,请遵循仅为Id
命名表格ID的EF Code First约定(或者,表格+ Id
的名称,例如{{1} }})。
这应该会给你这样的事情:
DyanmicPageId
然后,您需要在public class DynamicPage
{
public int Id { get; set; }
public int Order { get; set; }
public string MenuText { get; set; }
public string MenuHover { get; set; }
public int? ParentId { get; set; }
public virtual DynamicPage Parent { get; set; }
public virtual ICollection<DynamicPage> Children { get; set; }
}
课程的OnModelCreating
方法中明确设置父母与子女之间的关系。
DbContext
然后,您可以根据需要选择子女或孙子女:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<DynamicPage>()
.HasMany(page => page.Children)
.WithRequired(child => child.Parent)
.HasForeignKey(child => child.ParentId);
}