实体框架(代码优先) 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)添加到整个查询(在parens之后)和context.Tree之后但没有运气。我可以很容易地在using语句中调用一个递归的'ChildEnumerator(parentNode)'方法来强制枚举,但我觉得必须有一种更好的方法来确保对象和子对象(n-deep)都是完全的在逃避上下文范围时填充。
答案 0 :(得分:0)
如果格式正确,Include应该可以正常工作,如下所示:
using (DBContext context = new DBContext()
{
parentNode = context.
.Tree
.Include(inc => inc.Children)
.Where(query => query.IsSomeWayToIDTheParentNode)
.ToArray();
}
的官方文档
答案 1 :(得分: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);