如何用实体树结构递归枚举子属性

本文关键字:枚举 属性 递归 结构 何用 实体 | 更新日期: 2023-09-27 18:02:33

实体框架(代码优先)c#

我有一个树结构,节点是一对多的结构。

Node
|
'--- Children

我需要枚举所有的Children (iccollection)。目前,我的代码看起来是这样的:

using (DBContext context = new DBContext()
{
    parentNode = (from query in context.Tree
                  where query.IsSomeWayToIDTheParentNode
                  select query).ToArray();
}
var tree = SomeRecursiveTreeBuilderMethod(parentNode);

在这段代码中,枚举了parentNode的第一级Children属性,但没有枚举实际子节点的Children属性,因此抛出了contextdispose异常。

我试过添加。include (inc => inc. children)到整个查询(在父母之后)和上下文之后。树,但没有运气。我可以很容易地在using语句中调用递归的'ChildEnumerator(parentNode)'方法,强制枚举,但我觉得必须有一个更好的方法来确保对象和子对象(n-deep)在逃离上下文作用域时都被完全填充。

如何用实体树结构递归枚举子属性

这应该像你期望的那样工作:

List<Tree> parentNodes = new List<Tree>();
using (DBContext context = new DBContext()
{
    parentNodes = (from query in context.Tree
                   where query.IsSomeWayToIDTheParentNode
                   select query).ToList();
}
var tree = SomeRecursiveTreeBuilderMethod(parentNodes);

如果格式正确,Include应该可以工作,所以像这样:

using (DBContext context = new DBContext()
{
    parentNode = context.
        .Tree
        .Include(inc => inc.Children)
        .Where(query => query.IsSomeWayToIDTheParentNode)
        .ToArray();
}

这是DbExtensions的官方文档。包括