实体框架(代码优先) C#如何用实体树结构递归地枚举子属性?
我有一个树结构,其中包含一对多结构中的节点。
Node
|
\--- Children
我需要列举所有Children(ICollection)。目前,这是多么我有看代码:
using (DBContext context = new DBContext()
{
parentNode = (from query in context.Tree
where query.IsSomeWayToIDTheParentNode
select query).ToArray();
}
var tree = SomeRecursiveTreeBuilderMethod(parentNode);
在这段代码中,在parentNode第1级儿童属性枚举,但实际的子节点儿童性不枚举,因此抛出异常ContextDisposed 。
我试过在整个查询(parens之后)和context.Tree之后添加.include(inc => inc.Children),但没有运气。我可以很容易地在强制枚举的using语句中调用递归'ChildEnumerator(parentNode)'方法,但是我觉得必须有更好的方法来确保对象和子对象(n-deep)全部完全在转义上下文范围的时候填充。
你有没有尝试'var tree = SomeRecursiveTreeBuilderMethod(parentNode.ToList());'在第一次调用时强制枚举? – 2013-03-06 23:14:56
该方法无法强制枚举,因为它在上下文的范围之外,因此,当node.Children在低于父节点的级别上被调用时,它会尝试枚举处理的上下文并引发异常。 – jermny 2013-03-06 23:19:12
对不起,没有注意到......为什么不在''using'语句中移动递归函数调用呢? – 2013-03-06 23:22:47