Рекурсивно получить все дочерние элементы из себя ссылаясь многие на многие объект с ef-core - PullRequest
0 голосов
/ 05 декабря 2018

Мой первый пост на Stackoverflow.Поэтому заранее прошу прощения, если я чего-то не понимаю:)

У меня есть абстрактный класс с именем ElementEntity.Внутри этого класса у меня есть два отношения ко многим, ChildRelations и ParentRelations.

Мне нужен список с идентификаторами всех детей, внуков и т. Д., Образующих определенную ElementEntity.

Мы не знаем, насколько глубоко это дерево выглядит так: Context.Hospitals (). Include (b => b.ChildRelations) .ThenInclude (c => c.child) .ThenInclude и т.это не вариант.(Больница является производной ElementEntity)

Какой будет лучший (самый недорогой) подход?

Как указание, у определенного элемента могут быть сотни тысяч объектов потомства.

public abstract class ElementEntity
{
    public long Id {get; set;}

    public virtual ICollection<BaseGroupParentChildRelation> ParentRelations { get; } = new List<BaseGroupParentChildRelation>();
    public virtual ICollection<BaseGroupParentChildRelation> ChildRelations { get; } = new List<BaseGroupParentChildRelation>();

}

public class BaseGroupParentChildRelation 
{
    public long ParentId { get; set; }

    public virtual ElementEntity Parent { get; set; }

    public long ChildId { get; set; }

    public virtual ElementEntity Child { get; set; }
}

Возможное исправление:

 await projectDbContext.Set<BaseGroupParentChildRelation>().ToListAsync();                    
 var Hotels = await projectDbContext.Hotels.Include(b => 
 b.ChildRelations).ThenInclude(b => b.Child).ToListAsync();

Отели теперь включаютдети, внуки, правнуки и т. д. и т. д.

...