1

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

我有一个树结构,其节点采用一对多结构。

Node
|
\--- Children

我需要枚举所有的孩子(ICollection)。目前,这就是我查看代码的方式:

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

}

var tree = SomeRecursiveTreeBuilderMethod(parentNode);

在此代码中,枚举了 parentNode 上的第一级 Children 属性,但未枚举实际子节点的 Children 属性,因此引发 ContextDisposed 异常。

我尝试将 .Include(inc => inc.Children) 添加到整个查询(在括号之后)和 context.Tree 之后,但没有运气。我可以很容易地在 using 语句中调用递归 'ChildEnumerator(parentNode)' 方法来强制枚举,但我觉得必须有更好的方法来确保对象和子对象(n-deep)都完全在转义上下文范围时填充。

4

2 回答 2

0

这应该可以按您的预期工作:

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);
于 2013-03-07T07:39:00.920 回答
0

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

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

这是DbExtensions.Include的官方文档

于 2013-03-06T23:39:08.457 回答