2011-07-18 73 views
1

我有一个系统有3个对象 - BrandsCategoriesProducts。我使用Nhibernate作为我的ORM。loading的品牌 - >类别 - >产品hierarchy高效

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

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

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

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

我可以做的任何想法/优化,使其负载更快?

+0

您使用的数据库是? – Tridus

回答

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,该类将返回与该Category关联的产品数。

+0

“类别”未链接到“品牌”。 “品牌”和“类别”之间没有直接关联。一个品牌将拥有至少拥有该品牌的一种产品的所有类别。 –

+0

在这种情况下只需在产品上将'JoinQueryOver'更改为'InnerJoin'。 –