对于您确实需要从ContentDatabase
(即主数据库)读取并且不希望发布项目的情况,我找到了解决此问题的方法。例如,这可能是用户生成的内容。在 Active Commerce 中,我们会遇到诸如愿望清单之类的内容,这些内容总是在预览或非分阶段环境中从 master 读取,并在分阶段环境中通过 Web 服务访问。
通过设置Sitecore.Context.Site.DisableFiltering
为true
,将禁用对不可发布项目的过滤。我已经实现了一个简单的IDisposable
方法,它允许您暂时禁用过滤,并带有一个可选条件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ActiveCommerce.SitecoreX
{
public class ItemFilteringDisabler : IDisposable
{
private readonly bool _disableCondition = true;
public ItemFilteringDisabler()
{
Sitecore.Context.Site.DisableFiltering = true;
}
public ItemFilteringDisabler(bool disableCondition)
{
_disableCondition = disableCondition;
if (_disableCondition)
{
Sitecore.Context.Site.DisableFiltering = true;
}
}
public void Dispose()
{
if (_disableCondition)
{
Sitecore.Context.Site.DisableFiltering = false;
}
}
}
}
示例使用:
using (new ItemFilteringDisabler(!Sitecore.Context.PageMode.IsNormal))
{
Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}");
}