2017-02-22 116 views
0

是否有一種將單個模型屬性映射到viewModel的簡單方法? 我需要一些道具從「outter模式」「內部模型」(複合型),其餘地圖...如何使用AutoMapper將模型屬性映射到視圖模型

class Car 
{ 
    public int Id {get;set;} 
    public string Name {get;set;} 
    public virtual CarDetails Details {get;set;} 
} 

class CarDetails 
{ 
    public int Id {get;set;} 
    public string Model {get;set;} 
    public DateTime Year {get;set;}  
} 

class DetailsViewModel 
{ 
    public string Name {get;set;} 
    public string Model {get;set;} 
    public DateTime Year {get;set;} 
} 

然後,我希望能夠:

var viewModel = mapper.Map<Car, DetailsViewModel>(car); 

我試着用這樣的事情沒有成功映射這樣的:

CreateMap<Car, DetailsViewModel>().ForAllMembers(opts => opts.MapFrom(c => c.Details)); 

PS¹:我AW是用於拼合對象的命名對象,但不希望更改視圖模型的名稱,也不希望使用多個ForMember語句(我的當前模型比示例中的要大得多)。

PS².:我使用asp.net-core和一個AutoMapperConfig靜態類來完成所有配置。因此,在註冊配置之前,我無法訪問Mapper實例。

回答

1

AutoMapper配置:

var config = new MapperConfiguration(cfg => 
     { 
      cfg.CreateMap<Car, DetailsViewModel>() 
         .ForMember(x => 
          x.Model, opt => opt.MapFrom(src => src.Details.Model)) 
         .ForMember(x => 
          x.Year, opt => opt.MapFrom(src => src.Details.Year)); 

     }); 

var mapper = config.CreateMapper(); 

然後,你可以做

var detail = mapper.Map<Car, DetailsViewModel>(car); 
+0

請參考我的問題,先觀察 –

相關問題