Configuration 如何修复玻璃映射器错误-未能找到父项类型的配置?

Configuration 如何修复玻璃映射器错误-未能找到父项类型的配置?,configuration,sitecore,sitecore8,glass-mapper,sitecore8.1,Configuration,Sitecore,Sitecore8,Glass Mapper,Sitecore8.1,我有一个Sitecore 8.1 CD实例。我还有一些代码需要在主数据库中创建内容项。(我知道这是一个否定,但我现在需要弄清楚这一点)当我的代码试图使用Glass Mapper创建内容项时,我得到一个错误。下面是代码片段和错误消息。我只是想理解错误的含义。我感觉这只是一个配置问题。这段代码在我们的Sitecore CM服务器上运行良好。所以我希望通过简单地调整CD服务器上的配置,我就可以让它正常工作。到目前为止,我已经在ConnectionString.config和Sitecore.confi

我有一个Sitecore 8.1 CD实例。我还有一些代码需要在主数据库中创建内容项。(我知道这是一个否定,但我现在需要弄清楚这一点)当我的代码试图使用Glass Mapper创建内容项时,我得到一个错误。下面是代码片段和错误消息。我只是想理解错误的含义。我感觉这只是一个配置问题。这段代码在我们的Sitecore CM服务器上运行良好。所以我希望通过简单地调整CD服务器上的配置,我就可以让它正常工作。到目前为止,我已经在ConnectionString.config和Sitecore.config中重新启用了主条目。但这并没有解决这个问题

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:未能找到父级的配置 项目类型Sitecore.Data.Items.item-->System.NullReferenceException: 对象引用未设置为对象的实例。在 位于的System.Object.GetType() Glass.Mapper.Context.GetTypeConfiguration[T](对象对象对象,布尔值 不加载,布尔校验基)在 Glass.Mapper.Sc.SitecoreService.Create[T,TK](TK parent,T newItem, 布尔更新统计,布尔静默)-内部异常结束 堆栈跟踪---在Glass.Mapper.Sc.SitecoreService.Create[T,TK](TK 父项、T newItem、布尔更新统计、布尔静默)


它在这方面失败了

Item parentItem =  Factory.GetDatabase("master").GetItem("/sitecore/content/Non Page Content/Account Information/Shipping Addresses");
如果你在它周围放一张支票,上面写着

if (parentItem != null) { // your code }
然后代码将执行完毕,您不会得到异常,但如果parentItem为null,也不会发生任何事情


快速修复的解决方案是在CD服务器上提供一个“主”DB连接字符串(正如您所说,这是一个“不”字)。更好的解决方案是通过Sitecore项目API或您的自定义API公开主数据库,通过身份验证对其进行保护,然后通过API从CD服务器调用此代码。

我不确定您是否仍在寻找解决此问题的方法,但当我今天面对它时,我发现了您的问题

问题是您的
parentItem
具有类型
Item
。它会导致玻璃内部出现问题。 您可以使用任何类型作为父级,但限制是不应从Sitecore
Item
class继承该类型。 试试这个:

var parentItem =  Factory.GetDatabase("master").GetItem("/sitecore/content/Non Page Content/Account Information/Shipping Addresses").GlassCast<BaseSitecoreItem>();
newAddress = service.Create(parentItem, newAddress); 
var parentItem=Factory.GetDatabase(“master”).GetItem(“/sitecore/content/Non-Page content/Account Information/Shipping Addresses”).GlassCast();
newAddress=service.Create(parentItem,newAddress);
其中,
BaseSitecoreItem
是您的玻璃模型的一部分

它帮助了我,希望能帮助你