2017-02-22 7 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¹ .: Я ав имеют смысл именования для выравнивания объектов, но не хотят изменять имена модели представления и не хотят использовать несколько операторов ForMember тоже (моя текущая модель намного больше, чем та, что приведена в примере).

PS² .: Я использую asp.net-core и статический класс AutoMapperConfig, чтобы выполнить всю конфигурацию. Поэтому перед регистрацией конфигураций у меня нет доступа к экземпляру Mapper.

ответ

1

AutoMapper Config:

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

Пожалуйста, обратитесь к первому наблюдению моего вопроса –

Смежные вопросы