Если вы хотите упростить себе жизнь, следуйте правилам EF Code First, называя идентификаторы вашей таблицы просто 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);