はじめに

C#で開発を行っていると、ViewModelやDTOにデータを詰め替えるコードを書かなければならないことがあります。このようなプログラムは難しくはありませんが、単調な作業ゆえにケアレスミスをしやすく、思いのほかメンテナンスに手間どってしまう場合があります。

そこで、本稿ではAutoMapperというオープンソースライブラリを紹介します。AutoMapperを使うと、オブジェクト間でデータを簡単にコピーすることができます。命名ルールに沿ったコピーに加え、独自のマッピングルールを定義できるため、多くのシナリオに対応することができます。

AutoMapperとは

AutoMapperは、CodePlexにて公開されているオープンソースライブラリ(Apache License)です。ソースコードリポジトリはGoogleCode、メーリングリストはGoogleGroupにて運用されています。執筆時点での最新バージョンは1.0RC1です。入手するにはReleaseページからAutoMapper.dllをダウンロードします。

サンプルの構成

ASP.NET MVCの登場により、EntityからViewModelにデータをコピーする機会が増えてきています。そこで、本稿ではASP.NET MVCのプロジェクトを使ってAutoMapperを紹介していきます。

ここでは、書籍テーブル(Book)と著者テーブル(Author)を取得データとします。データアクセスにはSQL Server 2008とLINQ to SQLを使用します。

データダイアグラム

デーブルのデータの中身

プロジェクトの作成

最初にASP.NET MVC(C#)のプロジェクトを作成して、AutoMapper.dllに参照設定を行います。そしてサーバエクスプローラからテーブルをドラッグして、LINQ to SQLファイルにBook(書籍)とAuthor(著者)クラスを生成します。

BookクラスとAuthorクラス

続けて、コピー先となるBookViewクラスのコードを記述します。

コピー先のBookViewクラス

public class BookView
{
  public int ID { get; set; }                   //書籍のID
  public string Name { get; set; }              //書籍の名前
  public int Price { get; set; }                //書籍の価格
  public DateTime Pubdate { get; set; }         //書籍の出版日
  public int AuthorAge { get; set; }            //著者の年齢
  public string AuthorLastName { get; set; }    //著者の姓
  public string AuthorFirstName { get; set; }   //著者の名
}