2012-06-29 40 views
15

我有兩個從一個抽象基類繼承的類(MVC視圖模型)。具有基類和實現的不同配置選項的自動映射器

abstract class BaseModel { } 

class Car : BaseModel 
{ 
    public string Speed { get; set; } 
} 

class Camper : BaseModel 
{ 
    public int Beds { get; set; } 
} 

,並希望與基類,類似配置AutoMapper:

Mapper.CreateMap<BaseModel, DataDestination>(); 

var someObj = new DataDastination(); 
Mapper.Map(instanceOfBaseModel, someObj); 

在這裏我得到的錯誤,因爲Automapper沒有車或者露營的配置。試圖用類似這樣的東西配置Automapper:

Mapper.CreateMap<BaseModel, DataDestination>() 
    .ForMember(dest => dest.SomeProp, mapper => mapper.MapFrom(....)); 

在MapFrom中,我只能看到基類的屬性!如何配置Automapper以使用BaseClass和Car和Camper的特定ForMember表達式?例如,如果它是一輛汽車,從這個屬性映射出來,並且如果它是一輛露營車,則從其他地方映射該屬性。

回答

25

以下是描述Mapping Inheritance的主題。

以下應爲你工作:

Mapper.CreateMap<BaseModel, DataDastination>() 
    .Include<Car, DataDastination>() 
    .Include<Camper, DataDastination>();//.ForMember(general mapping) 
Mapper.CreateMap<Car, DataDastination>();//.ForMember(some specific mapping) 
Mapper.CreateMap<Camper, DataDastination>();//.ForMember(some specific mapping) 
+0

不工作了類似的情況[在AutoMapper 5無法從視圖模型映射到ApplicationUser(http://stackoverflow.com/questions/39541588/cannot上解釋-MAP-從-視圖模型到applicationuser合automapper -5-?noredirect = 1個#comment66397101_39541588)。任何想法? –

相關問題