2016-08-04 65 views
2

我有一個用VS2015開發的asp.net mvc應用程序。Auto Mapper v4.2.1 - 缺少類型映射配置或不支持的映射

在Global.asax.cs中的Application_Start方法中包含以下內容的方法被稱爲:

Mapper.Initialize(cfg => cfg.CreateMap<Domain.ESB.Fault, Models.FaultVmRec>()); 
Mapper.Initialize(cfg => cfg.CreateMap<Models.FaultVmRec, Domain.ESB.Fault>()); 

我檢查,這並獲得通過添加一個斷點執行。

在我的控制,我有以下幾點:

faultVmRec = Mapper.Map<Fault, FaultVmRec>(item); 

在這條線,我發現了異常:

{「缺少類型映射配置或不支持的映射\ r \ n \ r \ n映射類型:\ r \ nFault - > FaultVmRec \ r \ nLGSS.Unit4.BamPortal.Domain.ESB.Fault - > LGSS.Unit4.BamPortal.Website.Models.FaultVmRec \ r \ n \ r \ n目標路徑:\ r \ nFaultVmRec \ r \ n \ r \ n來源值:\ r \ nSystem.Data.Entity.DynamicProxies.Fault_805BF7128A26886D33A8989DFA212C8E378EDADE588B0922B23ECFE7F697D907「}

然而,如果我粘貼到執行圖如下之前明確初始化的映射:

Mapper.Initialize(cfg => cfg.CreateMap<Domain.ESB.Fault, Models.FaultVmRec>()); 
faultVmRec = Mapper.Map<Fault, FaultVmRec>(item); 

然後它工作正常!

任何人都可以看到我要出錯的地方嗎?

+0

爲什麼你不只是做類似'Mapper.Initialize(CFG => {cfg.CreateMap <>(); cfg.CreateMap <>();'但更進一步,爲什麼不使用配置文件呢?這已經成爲automapper的標準方法 –

回答

5

Mapper.Initialize(cfg => cfg.CreateMap<Domain.ESB.Fault, Models.FaultVmRec>)); Mapper.Initialize(cfg => cfg.CreateMap<Models.FaultVmRec, Domain.ESB.Fault>());

該代碼段將覆蓋彼此。您應配置爲:

Mapper.Initialize(cfg => { 
    cfg.CreateMap<Domain.ESB.Fault, Models.FaultVmRec>(); 
    cfg.CreateMap<Models.FaultVmRec, Domain.ESB.Fault>(); 
    cfg. 
    cfg... //so on 

}); 
2

調用Initialize將實例化新配置。將它們結合起來是這樣的:

Mapper.Initialize(cfg => { 
    cfg.CreateMap<Domain.ESB.Fault, Models.FaultVmRec>(); 
    cfg.CreateMap<Models.FaultVmRec, Domain.ESB.Fault>(); 
}); 

你也初始化捕捉到潛在的運行時錯誤documented here後,你應該驗證您的配置:

Mapper.Configuration.AssertConfigurationIsValid(); 
相關問題