2017-03-15 29 views
7

Mam metodę kontrolera WebAPI samochodów jak poniżej - przyp _carService.GetCarData zwraca zbiór CarDataDTO obiektówAutomapper w 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 to model WebAPI Stworzyłem.

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

CarDataDTO jest klasą Stworzyłem że modele DB stole - ja odzyskać dane za pomocą przechowywanych proc nazwie z Dapper.

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 
} 

Jeśli mam przerwania na linii samochodów var w moim kontrolera API widzę wszystko zwrócone zgodnie z oczekiwaniami i mam kolekcji obiektów CarDTO. Nie wymagam jednak, aby interfejs WebAPI zwracał identyfikator CarDataID, CarID lub Year, dlatego stworzyłem model API CarData.

Jak mogę łatwo używać Automappera do mapowania tylko nieruchomości, których dotyczy?

Czy potrzebuję czegoś skonfigurowanego w mojej klasie WebApiConfig?

Odpowiedz

17

Można zainstalować Nuget pakiet AutoMapper od: AutoMapper A potem zadeklarować klasę takich jak:

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

a następnie wywołać ten w Global.asax tak:

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

a jeśli chcesz zignorować pewne właściwości, możesz zrobić coś takiego:

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

I tak, jak to wykorzystać do mapowania jest:

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

Hi Jinish - jak by to być następnie wykorzystane w rzeczywistej metoda API? –

+0

właśnie zaktualizował odpowiedź na przykład użycia – Jinish