AutoMapper とは

AutoMapper は、一見複雑そうに見える問題――あるオブジェクトから別のオブジェクトへの手動マッピング――を解決するための、シンプルで小さなライブラリです。この種のプロパティ代入コードは繰り返しが多く退屈なものですが、AutoMapper はオブジェクト間のマッピングを自動化するツールです。

オブジェクト間マッパー:ある型の入力オブジェクトを、別の型の出力オブジェクトに変換します。

AutoMapper には一連の規約が組み込まれており、ターゲットクラスが命名規約に従っていれば、ほぼゼロ設定で2つの型の間のマッピングを完了できます。

マッピングコードを手書きするのは面倒ですが、それをテストするのはさらに面倒です。AutoMapper はシンプルな型設定を提供するとともに、マッピングロジックの単体テストもサポートしています。

インストール

NuGet パッケージマネージャーコンソールからインストール

PM> Install-Package AutoMapper

関連拡張パッケージ

  1. AutoMapper.Data:ADO.NET をサポートし、IDataReader からデータを読み取ってマッピング可能
  2. AutoMapper.EF6:EF6 用の拡張メソッドで、非同期 ProjectTo プロジェクションを提供
  3. AutoMapper.Collection:コレクションの等価マッピング。2つのコレクションを比較し、オブジェクトの等価性を判定
  4. AutoMapper.Collection.EF:EF の主キーと組み合わせて等価判定を行い、コレクションの追加・更新・削除を自動処理。DTO コレクションからデータベースエンティティコレクションへの永続化を実現

従来の手動オブジェクト代入の例

People(ソース)と Person(ターゲット)の2つのクラスがあり、プロパティ名は完全に同じ

class People
{
    public int Age { set; get; }
    public string Name { set; get; }
}

class Person
{
    public int Age { set; get; }
    public string Name { set; get; }
}Code language: JavaScript (javascript)

従来の書き方:プロパティを手動で1つずつ代入:

static void Main(string[] args)
{
    People p = new People() { Age = 13, Name = "Jack" };
    Person person = new Person();

    // 各プロパティを手動でコピー。プロパティが多いとコードが非常に冗長になる
    person.Name = p.Name;
    person.Age = p.Age;

    Console.WriteLine(person.Name);
    Console.WriteLine(person.Age);
    Console.ReadKey();
}Code language: JavaScript (javascript)

欠点:プロパティが多いほど、代入コードの重複が増える。フィールドを追加・変更する際、すべての代入コードを同期して修正する必要があり、書き漏れによるバグが発生しやすい。

AutoMapper の役割:上記のような xxx.プロパティ = yyy.プロパティ を手動で書く作業を代替し、規約に従って同名プロパティを自動的にコピーする。

AutoMapper とは

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です