Sitecore GlassMapper尝试使用查询属性获取没有版本的项目

时间:2015-10-02 10:12:24

标签: c# sitecore sitecore7.2 glass-mapper

我正在使用GlassMapper V3和Sitecore 7.2。与MVC。

Sitecore项目数据通过GlappMapper管道自动映射,模型不是很复杂。 该模型已由部分类扩展,以自动映射子项:

[SitecoreQuery("./*[@@templatename='Slider Element']", IsRelative = true)]
public virtual IEnumerable<Slider_Element> SliderElements { get;set; }

到目前为止工作正常。但是:

如果一个或多个子项目没有当前上下文语言的版本,我还是希望收到。这适用于PageEditMode,但不适用于普通模式。但是任何类型的语言回退都没有用,因为这种功能只应该适用于特定的属性。我需要的是这样的事情:

[SitecoreQuery("./*[@@templatename='Slider Element']", IsRelative = true, GetItemsHavingNoVersions = true)]
public virtual IEnumerable<Slider_Element> SliderElements { get;set; }

据我所知,GlassMapper可以在几个点进行自定义,但到目前为止我找不到任何可以添加此类功能的内容。

我还花了几个小时在网上搜索并发现了GlassMapper源代码。

SitecoreService类中有一个方法似乎可以执行逻辑的一部分,但我并不是100%确定:

public IEnumerable<T> Query<T>(string query, bool isLazy = false, bool inferType = false) where T : class
    {
        return CreateTypes( typeof(T), () => { return Database.SelectItems(query); }, isLazy, inferType) as IEnumerable<T>;
    }

非常感谢您的帮助!

最好的问候, 托马斯

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用 VersionCountDisabler

将您的调用代码包含在using语句中

using(new VersionCountDisabler()){

  var model =  sitecoreService.GetItem<MyModel>("/sitecore/content/home");

}

查看Glass网站了解更多信息 - http://www.glass.lu/Mapper/Sc/Documentation/VersionCountDisabler

或者您可以全局禁用检查

protected void Application_BeginRequest()
{
    Sitecore.Context.Items["Disable"] = new VersionCountDisabler();
}