我有一个Sitecore 8.1 CD实例。我还有一些代码需要在Master数据库中创建一个内容项。 (我知道这是禁止的,但我只需要在此刻解决这个问题)当我的代码尝试使用Glass Mapper创建内容项时,我收到错误。这是代码片段和错误消息。我只是想了解错误的含义。我有一种感觉,这只是一个配置问题。此代码在我们的Sitecore CM服务器上正常工作。所以我希望通过简单地调整我们的CD服务器上的配置,我可以让它工作。到目前为止,我已经在ConnectionStrings.config和Sitecore.config中重新启用了Master条目。但这并没有解决这个问题。
SitecoreService service = new SitecoreService("master");
SimpleAes aes = new SimpleAes();
using (new SecurityDisabler())
{
Item parentItem = Factory.GetDatabase("master").GetItem("/sitecore/content/Non Page Content/Account Information/Shipping Addresses");
newAddress = service.Create(parentItem, newAddress); //THIS IS WHERE THE CODE FAILS
user.Addresses.Add(newAddress);
Utility.PublishItem(service.ResolveItem(newAddress));
id = aes.EncryptToString(newAddress.Id.ToString());
user.Addresses = user.Addresses;
user.Save();
}
错误讯息:
Glass.Mapper.MapperException:无法找到父级的配置 item type Sitecore.Data.Items.Item ---> System.NullReferenceException: 你调用的对象是空的。在 System.Object.GetType()at Glass.Mapper.Context.GetTypeConfiguration [T](Object obj,Boolean doNotLoad,Boolean checkBase)at Glass.Mapper.Sc.SitecoreService.Create [T,TK](TK parent,T newItem, Boolean updateStatistics,Boolean silent)---内部异常结束 堆栈跟踪---在Glass.Mapper.Sc.SitecoreService.Create [T,TK](TK parent,T newItem,Boolean updateStatistics,Boolean silent)
答案 0 :(得分:0)
这条线失败了
Item parentItem = Factory.GetDatabase("master").GetItem("/sitecore/content/Non Page Content/Account Information/Shipping Addresses");
如果你检查一下
if (parentItem != null) { // your code }
然后代码将完成,您将不会获得异常,但如果parentItem为null,则不会发生任何事情。
快速修复解决方案是给一个'主人' CD服务器上的数据库连接字符串(如你所说,这是禁止的)。更好的解决方案是通过Sitecore Item API或您的自定义API公开master数据库,通过身份验证保护它,然后通过API从CD服务器调用此代码。
答案 1 :(得分:0)
我不确定你是否还在寻找如何解决这个问题,但是当我今天遇到它时,我发现了你的问题。
问题是您的parentItem
类型为Item
。它导致Glass内部出现问题。
您可以将任何类型用作父类,但限制是它不应从Sitecore Item
类继承。
试试这个:
var parentItem = Factory.GetDatabase("master").GetItem("/sitecore/content/Non Page Content/Account Information/Shipping Addresses").GlassCast<BaseSitecoreItem>();
newAddress = service.Create(parentItem, newAddress);
其中BaseSitecoreItem
是您的玻璃模型。
它帮助了我,希望能帮到你。