使用实体框架将子实体与父对象图一起加载

时间:2018-11-22 10:56:27

标签: c# entity-framework database-design entity-framework-6 parent-child

我正在尝试对类似于对象的图形表示的模型进行建模,其中对象的子代是父代依赖的对象。

这里的示例是表结构。

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

初始ID = 1取决于初始ID = 2,3,其中初始ID = 2进一步取决于初始ID = 4

我想编写一个查询来为Initiative Id = 1拉出这样的对象

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

即我希望子级主动性成为主动性对象,该对象将再次具有子级主动性,依此类推。 我希望结构像这样,以便在对对象进行操作之前可以使用深度优先搜索来解析子对象。 我设计的数据库结构是

enter image description here

我写的Entity Framework查询是

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

我目前得到的是,ChildrenInitiative应当有两个孩子,但是该孩子倡议的倡议还是ID = 1的同一倡议,而不是带有ChildInitiative.ChildInitiativeId的倡议对象

让我们假设这种表示形式暂时不会导致对循环图进行建模

0 个答案:

没有答案