EF代码优先:如何加载相关数据(父子孙子)?

时间:2011-09-22 00:28:13

标签: entity-framework ef-code-first entity-framework-5 entity-framework-4.1 entity-framework-6

我有这个实体:

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)(如果有)?感谢帮助。

2 个答案:

答案 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);
}