Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF加载层次结构的最佳方式(需要所有项目)_C#_Entity Framework_Lazy Loading - Fatal编程技术网

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

C# EF加载层次结构的最佳方式(需要所有项目),c#,entity-framework,lazy-loading,C#,Entity Framework,Lazy Loading,所以我有一个层次结构,我有一个递归函数来构建子对象。在每个级别上,执行Parent.Children延迟加载还是Context.where.Wherex=>x.ParentId==currentItemId更好 如果有更好的加载层次结构的方法,我也在寻找其他建议。在一个查询中获取所有项,然后在内存中构建层次结构是否更好 更多可能有帮助的细节: 这只是用来建一棵树。所以每个关卡都需要一个id和标题。我只有一个简单的树,每个项目都有一个ParentId,如果您依赖于children数据,那么立即加载

所以我有一个层次结构,我有一个递归函数来构建子对象。在每个级别上,执行Parent.Children延迟加载还是Context.where.Wherex=>x.ParentId==currentItemId更好

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

更多可能有帮助的细节:
这只是用来建一棵树。所以每个关卡都需要一个id和标题。我只有一个简单的树,每个项目都有一个ParentId,如果您依赖于children数据,那么立即加载它。如果仅在满足某些条件时才使用子数据,则我会让它延迟加载子数据。

如果依赖子数据,则立即加载它。如果子数据仅在满足某些条件时使用,则我会让它延迟加载子数据。

从RDBMS读取层次结构时有多种考虑因素:

如果您需要来自每个父级的所有子级,请急切地加载它们—最大限度地减少到数据库服务器的往返次数是让DB访问应用程序运行得更快的最常见技巧。 如果您访问了一小部分子项,并且希望访问所有的父项,那么延迟加载可能会更好—当您需要在决定是否检查子项之前查看父项,并且您的大多数决定都没有检查子项时,选择延迟加载:一两次往返带来的数据比您需要的数据多出十到二十倍,对您的影响也不大。 有些情况下,您无法读取整个层次结构-例如,因为只有直接的父ID可用。在这种情况下,一个常见的技巧是从根父级的ID生成层次ID,并将其作为字段添加到所有子级。此字段允许您一次性检索整个层次结构,然后在内存中修复引用。
要做出决策,您应该构建一个小型原型,用足够的行填充其数据表,以便进行有意义的分析,并对查询进行双向分析。请注意,在一个几乎为空的数据库上分析查询是没有用的,因为时间安排主要由往返来决定。

从RDBMS中读取层次结构有多种考虑因素:

如果您需要来自每个父级的所有子级,请急切地加载它们—最大限度地减少到数据库服务器的往返次数是让DB访问应用程序运行得更快的最常见技巧。 如果您访问了一小部分子项,并且希望访问所有的父项,那么延迟加载可能会更好—当您需要在决定是否检查子项之前查看父项,并且您的大多数决定都没有检查子项时,选择延迟加载:一两次往返带来的数据比您需要的数据多出十到二十倍,对您的影响也不大。 有些情况下,您无法读取整个层次结构-例如,因为只有直接的父ID可用。在这种情况下,一个常见的技巧是从根父级的ID生成层次ID,并将其作为字段添加到所有子级。此字段允许您一次性检索整个层次结构,然后在内存中修复引用。
要做出决策,您应该构建一个小型原型,用足够的行填充其数据表,以便进行有意义的分析,并对查询进行双向分析。请注意,在一个几乎为空的数据库上分析查询是没有用的,因为时间安排将由往返来决定。

表中的所有行是形成一棵树,还是存储多棵较小的子树?表中的所有行是形成一棵树,还是存储多棵较小的子树?