Automapper自動マッピングを実現するコード例
セキュリティ上、バックグラウンドでフロントとデータ転送を行う場合、本体モデルを直接転送せずにDto(Data transfer objectデータ転送オブジェクト)を使用することが多いので、バックグラウンドでデータをフロントに転送する際には不要な情報を省略し、必要な情報だけを残して、データの安全性を大いに高めることができる。
以下に二つの対応する関係モデルUser、UserDtoを示します。
この時、私たちはAutoMapperを通じてUserDtoからUserへの変換を完了してくれます。
まずNugetパッケージをインストールします
Tools-Nuget Package-Package Manage Cosolieに入力します。
Githubで与えられたヘルプドキュメントからは、2つの方法がマッピングを作成することができ、1つは静的なInitalizeであり、1つは動的な作成である。
以下は二つの異なる方法を使ってセルテストを行います。
ルールを書き終わったら、いつもAsertConfigrationIsValid方法を呼び出して、ルールが完全かどうかを確認します。
AutoMapperをより便利に使用するために、AutoMapperを拡張します。
以上は小编でご绍介したAutomapperの自动的なマッピングを実现するコードの実例です。皆さんに何かお聞きしたいことがあれば、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
以下に二つの対応する関係モデルUser、UserDtoを示します。
public class User
{
private const int NameMaxLength = 20;
private const int PassWordMaxLength = 16;
[Key]
public long Id { get; }
[MaxLength(NameMaxLength)]
public string Name { get; set; }
[MaxLength(PassWordMaxLength)]
[DataType(DataType.Password)]
public string PassWord { get; set; }
}
public class UserDto
{
private const int NameMaxLength = 20;
private const int PassWordMaxLength = 16;
[MaxLength(NameMaxLength)]
public string Name { get; set; }
[MaxLength(PassWordMaxLength)]
public string PassWord { get; set; }
}
ここでは、Idを自己成長キーと定義し、登録ページでは、このIdは見えないはずです。この時Dtoを使うメリットが現れます。この時、データベースを預け入れる時はUserDtoからUserへのタイプ転換に関わります。前の経験によって、必ず次のように書くことができます。
user.Name=userDto.Name;
user.PassWord=UserDto.PassWord;
このような変換はもちろん可能ですが、もし一つのUserオブジェクトが十分に複雑であれば、十数個から二十数個の属性を持っています。この時、私たちはAutoMapperを通じてUserDtoからUserへの変換を完了してくれます。
まずNugetパッケージをインストールします
Tools-Nuget Package-Package Manage Cosolieに入力します。
Install-Package AutoMapper
対応するNugetパッケージをインストールします。Githubで与えられたヘルプドキュメントからは、2つの方法がマッピングを作成することができ、1つは静的なInitalizeであり、1つは動的な作成である。
以下は二つの異なる方法を使ってセルテストを行います。
public void Using_Initlalize_Test()
{
UserDto dto = new UserDto
{
Name = "Niko",
PassWord = "1234",
};
Mapper.Initialize(ctx => ctx.CreateMap<UserDto, User>());
User user = Mapper.Map<UserDto, User>(dto);
user.Name.ShouldBe("Niko");
user.PassWord.ShouldBe("1234");
user.Id.ToString().ShouldBe("0");
}
public void Using_MapperConfiguration_Test()
{
var config = new MapperConfiguration(ctx => ctx.CreateMap<UserDto, User>());
var mapper = config.CreateMapper();
// var mapper = new Mapper(config);
UserDto dto = new UserDto
{
Name = "Niko",
PassWord = "1234",
};
User user = mapper.Map<User>(dto);
//User user = Mapper.Map<User>(dto);
user.Name.ShouldBe("Niko");
user.PassWord.ShouldBe("1234");
user.Id.ToString().ShouldBe("0");
}
ここでShuldryまで使って枠を言い切って、具体的な使い方は公式文書を参考にします。ルールを書き終わったら、いつもAsertConfigrationIsValid方法を呼び出して、ルールが完全かどうかを確認します。
Mapper.AssertConfigurationIsValid();
二つの方法はユニットテストに合格しました。このように、Automapperによって複雑なオブジェクトマッピングを処理すると、コード量が大幅に簡略化されます。AutoMapperをより便利に使用するために、AutoMapperを拡張します。
public static class AutoMapperExtension
{
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T MapTo<T>(this object obj)
{
if (obj == null) return default(T);
Mapper.Initialize(ctx=>ctx.CreateMap(obj.GetType(),typeof(T)));
return Mapper.Map<T>(obj);
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static List<T> MapTo<T>(this IEnumerable obj )
{
if (obj == null) throw new ArgumentNullException();
Mapper.Initialize(ctx => ctx.CreateMap ( obj.GetType(), typeof(T))) ;
return Mapper.Map<List<T>>(obj);
}
}
上の方法でユニットテストを行います。
public void testme()
{
UserDto dto = new UserDto
{
Name = "Niko",
PassWord = "1234",
};
User user=dto.MapTo<User>();
user.Name.ShouldBe("Niko");
user.PassWord.ShouldBe("1234");
user.Id.ToString().ShouldBe("0");
}
締め括りをつける以上は小编でご绍介したAutomapperの自动的なマッピングを実现するコードの実例です。皆さんに何かお聞きしたいことがあれば、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。