是否有一种将单个模型属性映射到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
实例。
答案 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);