2017-03-15 9 views
7

私は以下のように車WebAPIのコントローラメソッドを持っている - _carService.GetCarDataがCarDataDTOのコレクションはAutomapper

[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は、私が作成したWebAPIのモデルであるオブジェクトを返します注意してください。私はDapperのと呼ばれるストアドプロシージャを介してデータを取得する -

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

CarDataDTO

はモデルDBテーブルがあること、私が作成したクラスです。期待と私はCarDTOオブジェクトのコレクションを持っているとして、私は私のAPIコントローラでのvar車の行にブレークポイントを持っている場合は、私はすべてのものを見ることができます

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 
} 

が返さ。しかし、CarDataID、CarID、Yearを返すためにWebAPIを必要としないため、CarData APIモデルを作成しました。

Automapperを使用して、関連するプロパティのみを簡単にマップする方法はありますか?

WebApiConfigクラスに何か設定が必要ですか?

答えて

17

あなたがからAutoMapper nugetパッケージをインストールすることができます:AutoMapper そして、同様にクラスを宣言:

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

そして、このようなあなたのGlobal.asaxでこれを呼び出す:

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

そして、もし特定のプロパティを無視したい場合は、次のようにすることができます。

そして、あなたはマッピングのためにこれを使用する方法は次のとおりです。

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

こんにちはJinish - どのようにこれは、実際のAPIメソッドで使用されるのでしょうか? –

+0

は使用例の答えを更新しました – Jinish