我有一个带有自引用的实体(由实体设计器生成):
public MyEntity: EntityObject
{
// only relevant stuff here
public int Id { get...; set...; }
public MyEntity Parent { get...; set...; }
public EntityCollection<MyEntity> Children { get...; set...; }
...
}
我编写了一个存储过程,它从表中返回节点的子树(不仅仅是直接子节点)并返回MyEntity
对象列表。我正在使用存储过程来避免延迟加载任意深度树。这样,我可以在一次调用中从数据库中获取相关的子树节点。
List<MyEntity> nodes = context.GetSubtree(rootId).ToList();
一切都好。但是当我检查时nodes[0].Children
,它Count
等于 0。但是如果我调试和检查context.MyEntities.Results view
,儿童枚举会被填充。检查我的结果显示我的孩子node[0]
。
如何以编程方式强制我的实体上下文执行内存魔术并在属性上放置正确的Parent
引用Children
?
更新 1
我试过打电话
context.Refresh(ClientWins, nodes);
在我的GetSubtree()
电话确实正确设置了关系之后,但再次从数据库中获取了相同的节点。它仍然只是一种解决方法。但总比用context.MyEntities().ToList()
.
更新 2
我已经通过使用 EF Extensions 项目可靠地解决了这个问题。在下面检查我的答案。