Configuration 如何修复玻璃映射器错误-未能找到父项类型的配置?
我有一个Sitecore 8.1 CD实例。我还有一些代码需要在主数据库中创建内容项。(我知道这是一个否定,但我现在需要弄清楚这一点)当我的代码试图使用Glass Mapper创建内容项时,我得到一个错误。下面是代码片段和错误消息。我只是想理解错误的含义。我感觉这只是一个配置问题。这段代码在我们的Sitecore CM服务器上运行良好。所以我希望通过简单地调整CD服务器上的配置,我就可以让它正常工作。到目前为止,我已经在ConnectionString.config和Sitecore.config中重新启用了主条目。但这并没有解决这个问题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
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
。它会导致玻璃内部出现问题。
您可以使用任何类型作为父级,但限制是不应从SitecoreItem
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
是您的玻璃模型的一部分
它帮助了我,希望能帮助你