2017-02-22 1 views
0

Gibt es eine einfache Möglichkeit, eine einzelne Modelleigenschaft in einem viewModel zuzuordnen? Ich brauche ein paar Requisiten aus dem „outter Modell“ und der Rest aus dem „inneren Modell“ (komplexer Typ) zur Karte ...So modellieren Sie die Modelleigenschaft, um das Modell mithilfe von AutoMapper anzuzeigen

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;} 
} 

Dann möchte ich in der Lage sein:

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

ich habe versucht, dies ohne Erfolg kartieren so etwas wie dies mit:

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

PS¹ .: ich bin aw sind die Benennungskonventionen für das Reduzieren von Objekten, möchten aber nicht die Namen des Ansichtsmodells ändern und auch nicht mehrere ForMember-Anweisungen verwenden (mein aktuelles Modell ist viel größer als das aus dem Beispiel).

PS² .: Ich benutze asp.net-core und eine AutoMapperConfig statische Klasse, um alle Konfiguration zu tun. Ich habe also keinen Zugriff auf die Instanz , bevor ich die Konfigurationen registriere.

Antwort

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(); 

Dann können Sie tun

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

verweisen auf die erste Beobachtung meiner Frage –

Verwandte Themen