0

Orchard 中的 Projections 模块存在以下问题:
我的页面具有主要类别,当打开时查询数据库(不是 Orchard 的,来自单独的应用程序)的子类别和这些子类别中的项目。

我有一个投影,它在小部件中显示主要类别标题,以便于导航。然而,页面加载时间飞涨,因为即使在投影中,它也会尝试将每个主要类别作为一个整体加载,导致对我们的第二个数据库的查询量呈指数增长,加载时间超过 30 秒。

Projections 模块是否可以仅查询标题部分(可能还有任何自定义绑定)并忽略执行这些查询的部分?

提前致谢。

编辑

我们使用了 Mini Profiler,结果如下:
迷你分析器输出

似乎问题出在第 111 行的 Orchard.Projections.Drivers.ProjectionPartDriver 的 Display 方法中:

var contentItems = _projectionManager.GetContentItems(query.Id, pager.GetStartIndex() +     part.Record.Skip, pager.PageSize).ToList();

我能做些什么呢?

4

1 回答 1

1

我认为这个 N+1 查询问题是由于某些部分的记录被延迟加载的事实引起的,因此它是每个访问部分的每个获取项目的一个后续查询。

使用 ContentQuery 有 QueryHints 可以使用 IHqlQuery(投影仪过滤器中使用的查询)急切加载部分记录,您可以使用其 Join() 方法加入(=急切加载)表。但是,这需要您编写代码:创建一个仅加入表的投影仪过滤器提供程序,然后将此过滤器与相应的查询一起使用。

我不知道有任何更简单的使用投影仪进行预加载的选项,但它非常值得探索。你为什么不打开一个关于这个的问题?

于 2013-05-11T10:36:15.073 回答