2016-11-18 43 views
2

我有一個Sitecore 8.1 CD實例。我也有一些代碼需要在Master數據庫中創建一個內容項。 (我知道這是一個禁忌,但我現在只需要弄清楚)當我的代碼試圖使用Glass Mapper創建一個內容項時,我得到一個錯誤。這裏是代碼片段和錯誤消息。我只是想了解錯誤的含義。我有一個感覺,這只是一個配置問題。此代碼在我們的Sitecore CM服務器上正常工作。所以我希望通過簡單地調整我們的CD服務器上的配置,我可以得到這個工作。到目前爲止,我已經在ConnectionStrings.config和Sitecore.config中重新啓用了Master條目。但是這並沒有解決這個問題。如何修復Glass Mapper錯誤 - 無法找到父項類型的配置?

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: 對象引用不設置爲一個對象的實例。在在 Glass.Mapper.Context.GetTypeConfiguration [T](對象OBJ,布爾 doNotLoad,布爾checkBase) System.Object.GetType()在 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布爾無聲)

回答

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項目API或您的自定義API公開主數據庫,通過身份驗證保護它,然後通過API從CD服務器調用此代碼。

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是你的一些玻璃模型。

它幫助了我,希望能幫助你。

相關問題