2014-08-28 21 views
0
ViewModel: 
Class BaseViewModel 
{ 
    public string ViewOnlyProperty{get; set;} 
    ... 
} 

Class VmClass<T,A>:BaseViewModel where T:IVmShared A:IVmSpecific 
{ 
    ... 
} 

DomainModel: 
Class BaseDomainModel 
{ 
    ... 
} 

Class DomainClass<T,A>:BaseDomainModel where T:IDomainShared A:IDomainSpecific 
{ 
    ... 
} 

Automapper: 

Mapper.CreateMap<BaseDomainModel, BaseViewModel>() 
.Include<IDomainClass<IDomainShared,IDomainSpecific>, VmClass<IVmShared,IVmSpecific>>() 
// Included other concrete classes implements Domain and View models interfaces 
.ForMember(x => x.ViewOnlyProperty, opt => opt.Ignore()); 

Mapper.CreateMap<IDomainClass<IDomainShared,IDomainSpecific>, VmClass<IVmShared,IVmSpecific>>() 
.ForMember(x => x.ViewOnlyProperty, opt => opt.Ignore()).ReverseMap(); 

我具有相同的ViewModel到域映射配置。但我以后Mapper.AssertConfigurationIsValid();自动映射器配置忽略目标类的基本成员

Unmapped members were found. Review the types and members below. 
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type 

VmClass`2 -> DomainClass`2 (Source member list) 
VmClass`2[[IVmShared],[IVmSpecific]] -> DomainClass`2[[IDomainShared],[IDomainSpecific]] (Source member list) 
--------------------------------------------------------------------------------------- 
ViewOnlyProperty 

,提示以下异常为什么我收到例外视图模型属性时,它验证viewModel->的DomainModel映射,其中目标没有这个属性在所有基类?

回答

0

我发现了这个问题的原因。它是:

Mapper.CreateMap<IDomainClass<IDomainShared,IDomainSpecific>, VmClass<IVmShared,IVmSpecific>>() 
.ForMember(x => x.ViewOnlyProperty, opt => opt.Ignore()).ReverseMap(); 

ReverseMap()不起作用,因为ViewOnlyProperty不存在于目标中。但是Automapper试图将“ViewOnlyProperty”从域映射到视图模型,因为反向映射是在同一个CreateMap()上完成的。问题通过将映射分解为:

Mapper.CreateMap<IDomainClass<IDomainShared,IDomainSpecific>, VmClass<IVmShared,IVmSpecific>>() 
.ForMember(x => x.ViewOnlyProperty, opt => opt.Ignore()); 

Mapper.CreateMap<VmClass<IVmShared,IVmSpecific>,IDomainClass<IDomainShared,IDomainSpecific>>();