如何用实体树结构递归枚举子属性
本文关键字:枚举 属性 递归 结构 何用 实体 | 更新日期: 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的官方文档。包括