C# 高效加载品牌->类别->产品层级
我有一个系统,有3个对象-品牌,类别和产品。我使用Nhibernate作为我的ORM 将产品分配给一个品牌和多个类别。对于我们正在建设的电子商务网站,我们需要在左侧显示品牌菜单。对于每一个品牌,我们的想法是展示该品牌中只有一个产品的类别 例如,如果我们有3个类别——露营、徒步旅行和攀岩,以及3个品牌A、B、C。如果品牌A没有属于“攀岩”类别的产品,则该类别不会显示 问题是如何有效地做到这一点。对于每个品牌,它需要检查当前品牌的每个类别,并检查该类别下是否至少有一种产品。有200个类别和20个品牌,在最坏的情况下,这将导致大约2000个数据库调用 另一种选择是在内存中加载所有产品,但如果有大量20000+的产品,这种方式也会很慢 我能做些什么想法/优化,让它加载得更快吗?你可以用它来获取每个品牌的类别以及该类别中的产品数量。我目前无法访问我的参考资料,因此这可能不是100%准确,但您可以理解我的意思:C# 高效加载品牌->类别->产品层级,c#,nhibernate,optimization,performance,hierarchy,C#,Nhibernate,Optimization,Performance,Hierarchy,我有一个系统,有3个对象-品牌,类别和产品。我使用Nhibernate作为我的ORM 将产品分配给一个品牌和多个类别。对于我们正在建设的电子商务网站,我们需要在左侧显示品牌菜单。对于每一个品牌,我们的想法是展示该品牌中只有一个产品的类别 例如,如果我们有3个类别——露营、徒步旅行和攀岩,以及3个品牌A、B、C。如果品牌A没有属于“攀岩”类别的产品,则该类别不会显示 问题是如何有效地做到这一点。对于每个品牌,它需要检查当前品牌的每个类别,并检查该类别下是否至少有一种产品。有200个类别和20个品牌
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。