如果您想让自己的生活更轻松,请遵循 EF Code First 约定,简单地命名您的表 ID Id
(或者,表的名称 + Id
,例如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);
}
然后,您可以根据需要选择子或孙:
var parent = dbContext.DynamicPages.Where(page => page.ParentId == null);
var children = parent.Children;
var grandchildren = parent.SelectMany(page => page.Children);
var allRelatedPages = parent.Union(children).Union(grandchildren);