gpt4 book ai didi

c# - EF加载层次结构的最佳方式(需要所有项目)

转载 作者:行者123 更新时间:2023-11-30 20:48:44 25 4
gpt4 key购买 nike

所以我有一个层次结构,我有一个递归函数来构建 child 。在每个级别,做 Parent.Children 会更好吗? (延迟加载)或 Context.Whatever.Where(x => x.ParentId == currentItemId)

如果有更好的加载层次结构的方法,我也在寻找其他建议。在一个查询中获取所有项目,然后在内存中构建层次结构会更好吗?

一些可能有帮助的更多细节:这只是用来 build 一棵树。所以每个“级别”真的只需要一个 id 和 title 。我只有一棵简单的树(每个项目都有一个 ParentId)

最佳答案

从 RDBMS 读取层次结构有多个注意事项:

  • 如果您需要每个父项的所有子项,请“急切地”加载它们 - 尽量减少往返数据库服务器的次数是让您的数据库访问应用程序运行得更快的最常用技巧.
  • 如果您访问一小部分 child ,并且您想要所有 parent ,延迟加载可能会更好 - 当您需要在决定是否检查 child 之前看到 parent 时,以及你的大部分决定结果证明你不检查 child ,而是选择延迟加载:一两次往返不会带来比你需要的数据多十到二十倍的伤害。
  • 有些情况下您无法读取整个层次结构 - 例如,因为只有直接父级 ID 可用。在这种情况下,一个常见的技巧是根据根父级的 ID 创建一个“层次结构 ID”,并将其作为一个字段添加到所有后代。此字段可让您一次性检索整个层次结构,然后修复内存中的引用。

要做出决定,您应该构建一个小型原型(prototype),用足够的行填充它的数据表以使分析有意义,并以两种方式分析查询。请注意,在几乎空的数据库上分析查询是没有用的,因为时间将由往返决定。

关于c# - EF加载层次结构的最佳方式(需要所有项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24266889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com