Загрузка дочерних сущностей с графом родительских объектов с использованием Entity Framework - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь смоделировать нечто похожее на графическое представление объекта, где его дочерние элементы являются зависимостями, от которых зависит родитель.

Примером здесь является структура таблицы.

Initative
Id  |  Name
 1  |  Init1
 2  |  Init2
 3  |  Init3
 4  |  Init4

InitiativeChildren
Id  |InitiativeId   InitiativeChildrenId
1   |    1         |         2
2   |    1         |         3
3   |    2         |         4

Categories
Id  | InitiativeId  | Name
1   |     1         | Init1Category1
2   |     1         | Init1Category2
3   |     1         | Init1Category3
4   |     2         | Init2Category1
5   |     2         | Init2Category2
6   |     2         | Init2Category3
7   |     3         | Init3Category1
8   |     3         | Init3Category2

Инициативный идентификатор = 1 зависит от Инициативного идентификатора = 2, 3, где Инициативный идентификатор = 2 дополнительно зависит от Инициативного идентификатора = 4

Я хочу написать запрос для извлечения объекта, подобного этомудля Инициативы Id = 1

Initiative
{
Id : 1
Children = [ Initiative { 
          Id = 2, 
          Children = [ Initiative 
          {
            Id = 4,
            Children = []
          }]
          },
          Initiative { 
          Id = 3, 
          Children = []
          }]
}

т.е. я хочу, чтобы дочерняя инициатива была Объектом Инициативы, которая снова будет иметь дочерние инициативы и так далее.Я хочу, чтобы структура была такой, чтобы я мог сначала использовать поиск по глубине, чтобы разрешить дочерние объекты, прежде чем воздействовать на этот объект.Структура базы данных, которую я разработал, -

enter image description here

И написанный мне запрос структуры Entity:

var result = context.Initiatives
                    .Include(m => m.InitiativeChildrens)
                    .Include(m => m.Categories)
                    .Where(m => m.Id == 1)
                    .ToList();

В настоящее время я получаючто у ChildrenInitiative есть два ребенка, как и должно быть, но Инициатива «Инициатива для этого ребенка» снова является той же самой Инициативой с Id = 1, в отличие от Инициативного объекта с ChildInitiative.ChildInitiativeId

Предположим, что это представлениепока не приводит к моделированию циклического графа

...