2017-03-15 3 views
7

I wie unten ein Auto WebAPI Controller-Methode haben - beachten Sie _carService.GetCarData eine Sammlung von CarDataDTOAutoMapper in WebAPI-Controller

[HttpGet] 
[Route("api/Car/Retrieve/{carID}/{year}")] 
public IEnumerable<CarData> RetrieveTest(int carID, int year) 
{ 
    //Mapper.Map<> 
    var cars = _carService.GetCarData(carID, year); 
    //var returnData = Mapper.Map<CarData, CarDataDTO>(); 
    return cars; 
} 

Cardata Objekte zurückgibt, ist ein WebAPI Modell, das ich geschaffen haben.

public class CarData 
{ 
    public string Name { get; set; } 
    public string Colour { get; set; } 
    //other properties removed from brevity 
} 

CarDataDTO ist eine Klasse, die ich geschaffen habe, dass die Modelle der DB Tabelle - ich die Daten über eine gespeicherte Prozedur mit adrett genannt abzurufen.

public class CarDataDTO 
{ 
    public int CarDataID { get; set; } 
    public int CarID { get; set; } 
    public int Year { get; set; } 
    public string Name { get; set; } 
    public string Colour { get; set; } 
    //other properties removed from brevity 
} 

Wenn ich einen Haltepunkt auf der var Autos Linie in meinem API-Controller habe, kann ich alles sieht wieder wie erwartet, und ich habe eine Sammlung von CarDTO Objekten. Allerdings muss die WebAPI nicht die CarDataID, CarID oder Year zurückgeben, weshalb ich das CarData API-Modell erstellt habe.

Wie kann ich Automapper einfach verwenden, um nur die Eigenschaften abzubilden, mit denen ich mich beschäftige?

Benötige ich etwas in meiner WebApiConfig-Klasse eingerichtet?

Antwort

17

Sie konnten das AutoMapper nuget Paket aus installieren: AutoMapper Und dann eine Klasse deklarieren wie:

public class AutoMapperConfig 
{ 
    public static void Initialize() 
    { 
     Mapper.Initialize((config) => 
     { 
      config.CreateMap<Source, Destination>().ReverseMap(); 
     }); 
    } 
} 

Und dann dies wie dies in Ihrem Global.asax nennen:

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AutoMapperConfig.Initialize(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
    } 
} 

Und wenn Wenn Sie bestimmte Eigenschaften ignorieren möchten, können Sie beispielsweise Folgendes tun:

Mapper.CreateMap<Source, Destination>() 
    .ForMember(dest => dest.SomePropToIgnore, opt => opt.Ignore()) 

Und so, wie Sie diese für die Zuordnung verwenden ist:

DestinationType obj = Mapper.Map<SourceType, DestinationType>(sourceValueObject); 
List<DestinationType> listObj = Mapper.Map<List<SourceType>, List<DestinationType>>(enumarableSourceValueObject); 
+0

Hallo Jinish - wie würde dies dann in der eigentlichen API-Methode verwendet werden? –

+0

aktualisiert gerade die Antwort für Verwendungsbeispiel – Jinish