2017-02-22 121 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

请参考我的问题,先观察 –

相关问题