Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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# 高效加载品牌->类别->产品层级_C#_Nhibernate_Optimization_Performance_Hierarchy - Fatal编程技术网

C# 高效加载品牌->类别->产品层级

C# 高效加载品牌->类别->产品层级,c#,nhibernate,optimization,performance,hierarchy,C#,Nhibernate,Optimization,Performance,Hierarchy,我有一个系统,有3个对象-品牌,类别和产品。我使用Nhibernate作为我的ORM 将产品分配给一个品牌和多个类别。对于我们正在建设的电子商务网站,我们需要在左侧显示品牌菜单。对于每一个品牌,我们的想法是展示该品牌中只有一个产品的类别 例如,如果我们有3个类别——露营、徒步旅行和攀岩,以及3个品牌A、B、C。如果品牌A没有属于“攀岩”类别的产品,则该类别不会显示 问题是如何有效地做到这一点。对于每个品牌,它需要检查当前品牌的每个类别,并检查该类别下是否至少有一种产品。有200个类别和20个品牌

我有一个系统,有3个对象-品牌,类别和产品。我使用Nhibernate作为我的ORM

将产品分配给一个品牌和多个类别。对于我们正在建设的电子商务网站,我们需要在左侧显示品牌菜单。对于每一个品牌,我们的想法是展示该品牌中只有一个产品的类别

例如,如果我们有3个类别——露营、徒步旅行和攀岩,以及3个品牌A、B、C。如果品牌A没有属于“攀岩”类别的产品,则该类别不会显示

问题是如何有效地做到这一点。对于每个品牌,它需要检查当前品牌的每个类别,并检查该类别下是否至少有一种产品。有200个类别和20个品牌,在最坏的情况下,这将导致大约2000个数据库调用

另一种选择是在内存中加载所有产品,但如果有大量20000+的产品,这种方式也会很慢

我能做些什么想法/优化,让它加载得更快吗?

你可以用它来获取每个品牌的类别以及该类别中的产品数量。我目前无法访问我的参考资料,因此这可能不是100%准确,但您可以理解我的意思:

QueryOver<Brand>()
   .JoinQueryOver(b => b.Categories)
   .Select(c => c.CategoryId) //or whatever else you want to select
    .SelectCount(c=> c.Products);
另一个选项是为Category类定义一个公式,该公式将返回与该类别关联的产品计数

类别与品牌没有关联。品牌和类别之间没有直接联系。一个品牌将拥有至少一个该品牌产品的所有类别。在这种情况下,只需将JoinQueryOver更改为InnerJoin on products。