如何使用AutoMapper

时间:2017-02-22 00:20:24

标签: c# asp.net asp.net-mvc automapper

是否有一种将单个模型属性映射到viewModel的简单方法? 我需要从“outter model”中映射一些道具,其余来自“内部模型”(复杂类型)......

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¹:我知道扁平化对象的命名对流,但是不想更改视图模型的名称,也不想使用多个ForMember语句(我当前的模型很多大于示例中的那个。)

PS²:我正在使用asp.net-core和AutoMapperConfig静态类来进行所有配置。因此,在注册配置之前,我无权访问Mapper实例。

1 个答案:

答案 0 :(得分: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);