Auto Mapper v4.2.1 - 缺少类型映射配置或不支持的映射

时间:2016-08-04 15:10:50

标签: c# asp.net-mvc automapper

我有一个用VS2015开发的asp.net mvc应用程序。

在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 \ nMapping类型:\ r \ nFault - &gt; FaultVmRec \ r \ nLGSS.Unit4.BamPortal.Domain.ESB.Fault - &gt; LGSS。 Unit4.BamPortal.Website.Models.FaultVmRec \ r \ n \ r \ n目标路径:\ r \ nFaultVmRec \ r \ n \ r \ nSource值:\ r \ nSystem.Data.Entity.DynamicProxies.Fault_805BF7128A26886D33A8989DFA212C8E378EDADE588B0922B23ECFE7F697D907“}

但是,如果我粘贴以在执行映射之前显式初始化映射,如下所示:

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

然后它运作正常!

任何人都能看到我出错的地方吗?

2 个答案:

答案 0 :(得分: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

});

答案 1 :(得分:2)

调用Initialize实例化新配置。像这样结合起来:

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

此外,您应该在初始化之后验证配置以捕获潜在的运行时错误documented here

Mapper.Configuration.AssertConfigurationIsValid();