EF6:在分层父/子模型中获取子树

时间:2014-07-17 13:00:42

标签: c# mysql performance entity-framework

我有一个自我关联的实体来模拟分层树。每个实体都有0个或1个父实体,并且可以有许多子实体。

那就是说,我试图让所有实体从任意节点(子树)开始。

我的尝试:

// Get root node
var rootNode = DB.HierarchyNodeSet.Where(x => x.Id == inputNodeId).SingleOrDefault();

// Recursively get all children from this node
IEnumerable<HierarchyNode> subTreeNodes = RecursiveGetNodeChildren(rootNode);

RecursiveGetNodeChildren()编码如下:

private IEnumerable<HierarchyNode> RecursiveGetNodeChildren(HierarchyNode n)
{
    List<HierarchyNode> lsOut = new List<HierarchyNode>();
    lsOut.Add(n);
    if (n.Children.Any())
        foreach (var child in n.Children)
            lsOut.AddRange(RecursiveGetNodeChildren(child));

    return lsOut;
}

这有效,但速度太慢(我有~10k节点)。

要获得根节点,我花了5-7秒,这是我可以接受的,但递归例程需要超过30秒。

我认为我从错误的角度来看问题。你们中的任何人都可以建议(如果有的话)以更快的方式获得分层数据的最佳实践吗?

提前谢谢

F。

0 个答案:

没有答案