Profileの役割:大量のマッピングルールを独立したクラスに切り出し、Mainメソッドに全部詰め込まないようにすることで、複数のエンティティマッピングを管理しやすくします。
1、カスタムProfileクラス
AutoMapperが提供するProfileを継承し、コンストラクタ内にマッピングルールを記述します。CreateMapを複数まとめて書くことができます。
using AutoMapper;
/// <summary>
/// マッピング設定クラス
/// </summary>
public class MappingProfile : Profile
{
public MappingProfile()
{
// Person → People
CreateMap<Person, People>();
// People → Person、双方向マッピング
CreateMap<People, Person>();
}
}
// [コードブロック内の中国語翻訳]
// マッピング設定クラス
// Person → People
// 双方向マッピング
Code language: HTML, XML (xml)
方法1:初期化時にProfileを追加
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
Code language: JavaScript (javascript)
方法2:フル記述、Profileオブジェクトをインスタンス化
var mc = new MapperConfigurationExpression();
mc.AddProfile(new MappingProfile());
Mapper.Initialize(mc);
// [コードブロック内の中国語翻訳]
// Profileオブジェクトをインスタンス化
Code language: JavaScript (javascript)
2、複数のProfileを読み込む
プロジェクトの業務が複雑になると、Profileクラスを複数に分割することがあります。一度にすべて登録できます:
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
x.AddProfile<MappingProfile2>();
});
Code language: HTML, XML (xml)
完全なProgram例
class Program
{
static void Main(string[] args)
{
// ========= 設定:Profileマッピングを読み込む =========
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
// ソースオブジェクト、ターゲットオブジェクト
Person p = new Person()
{
Age = 12,
Name = "Tom",
Birthday = DateTime.Now,
Sex = true,
Salary = 10000
};
People peo = new People()
{
Age = 36,
Name = "Jack",
Birthday = DateTime.Now,
Sex = true,
Salary = 102000
};
// 正向マッピング Person → People
Mapper.Map(p, peo);
// 反向マッピング People → Person
Mapper.Map(peo, p);
Console.WriteLine(peo.Name);
Console.WriteLine(p.Name);
Console.ReadKey();
}
}
// [コードブロック内の中国語翻訳]
// 設定:Profileマッピングを読み込む
// ソースオブジェクト、ターゲットオブジェクト
// 正向マッピング Person → People
// 反向マッピング People → Person
Code language: JavaScript (javascript)
Profileを設定する
Previous: インストールと最初のサンプル
Next: フラット化マッピング(Flattening)