加载品牌 - >类别 - >产品有效率高

时间:2011-07-18 13:06:16

标签: c# nhibernate optimization performance hierarchy

我的系统有3个对象 - BrandsCategoriesProducts。我使用Nhibernate作为我的ORM。

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

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

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

另一种选择是将所有产品加载到内存中,但如果有很多产品(20,000 +),这种方式也会很慢。

我能做的任何想法/优化,使其加载速度更快?

1 个答案:

答案 0 :(得分:0)

您可以使用QueryOver获取每个品牌 - 其类别和该类别中的产品数量。 (我目前无法访问我的引用,所以这可能不是100%准确,但你能够理解我的意思):

QueryOver<Brand>()
   .JoinQueryOver(b => b.Categories)
   .Select(c => c.CategoryId) //or whatever else you want to select
    .SelectCount(c=> c.Products);

另一个选项可以是为Category类定义公式property,该公式将返回与该类别关联的产品计数。