2014-08-28 34 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>>();