5

我有一个正在工作的 Sitecore 7 + Glass Mapper 3 安装,我希望对其进行优化。

我的代码的一个例子是:

[SitecoreQuery(".//*[@@templateid = '{011EC776-D9F3-4D73-8D8D-E454417E7574}']", 
                                                               IsRelative = true)]
IEnumerable<ItineraryLine> Itinerary { get; set; }

我希望使用 FastQuery,但出现错误:

字符串结尾应在位置 4

尝试了以下解决方案,这涉及插入getLookupSourceItems管道 - 但我认为这不是正确的管道,因为它不会在调试中触发。

Glass 在这种情况下是否使用了另一条管道(如果有的话)?有没有其他方法可以解决我加快速度的目标?

如果我不使用属性而是扩展方法,我可以手动执行此操作并用于*[@@id='']设置根节点,但我希望尽可能避免这种情况。

4

1 回答 1

7

当使用 IsRelative 设置为 true 时,GMS 通过 Axes SelectItem 推送查询。Sitecore 不允许快速查询 Axes 选择,例如:

Item.Axes.SelectItems("fast:./*");

请参阅此处的文档第 3 页:

http://www.iosh.co.uk/~/media/using%20sitecore%20fast%20query001.ashx

然而,GMS 很棒,让我们可以用另一种方式解决这个问题,您可以在查询中放置 GMS 将扩展的占位符。删除 IsRelative 属性并使用 {path} 占位符允许相同的结果:

[SitecoreQuery("fast:{path}//*[@@templateid = '{011EC776-D9F3-4D73-8D8D-E454417E7574}']")]
IEnumerable<ItineraryLine> Itinerary { get; set; }

路径占位符将扩展为当前正在映射的项目的完整路径。

于 2014-01-25T22:24:04.560 回答