ASP.NET Core実装オブジェクト自動マッピング-AGileMapper
2879 ワード
なぜオブジェクト間でマッピングするのか
結合性あるいは安全性の考慮あるいは性能の考慮にあって私達はModel模型を彼らに伝達することを望んでいないで、私達はプロジェクトの中でいくつかDTO(Data transfer objectデータの伝送の対象)を作成して、データの伝送を行います.
概要
AgileMapperはゼロ構成で、高度に構成可能なオブジェクト-オブジェクトマッパであり、表示可能な実行計画を有し、目標は.NET Standard 1.0+と.NET 3.5+.クエリーマッピング、オブジェクト作成、深度クローン、idセンシングの更新とマージを実行し、拡張方法、静的API、またはインスタンスAPIで使用することができる.
クイックスタート
NuGetによるAgileMapperのインストール
基本的な使い方
オブジェクトの作成
次の方法で別のオブジェクトを作成します.
クエリー・マッピング
エンティティから別のタイプへの使用
深度クローン
更新
コマンドを使用して、オブジェクトのメンバーと別の値を更新します.
結合
次の方法を使用して、オブジェクトの未入力メンバーを別の値にマージします.
メンバーを無視
ターゲットメンバーが一致するかどうかは、互換性のあるソースメンバーではデフォルトで無視されますが、マッパに無視するように伝えることもできます.
Order.OrderDtoが一致しないため、DateCreatedは無視されますが、Idプロパティは更新され、更新を停止できます.
複数のフィールドを無視し、無視条件を設定
空の結果
ターゲットクラスメンバーが一致しない場合はnullにマッピングできます.
例:
複雑なタイプを構成nullを返してインスタンス化しない
結合性あるいは安全性の考慮あるいは性能の考慮にあって私達はModel模型を彼らに伝達することを望んでいないで、私達はプロジェクトの中でいくつかDTO(Data transfer objectデータの伝送の対象)を作成して、データの伝送を行います.
概要
AgileMapperはゼロ構成で、高度に構成可能なオブジェクト-オブジェクトマッパであり、表示可能な実行計画を有し、目標は.NET Standard 1.0+と.NET 3.5+.クエリーマッピング、オブジェクト作成、深度クローン、idセンシングの更新とマージを実行し、拡張方法、静的API、またはインスタンスAPIで使用することができる.
クイックスタート
NuGetによるAgileMapperのインストール
PM> Install-Package AgileObjects.AgileMapper
基本的な使い方
オブジェクトの作成
次の方法で別のオブジェクトを作成します.
var customer = Mapper.Map(customerViewModel).ToANew();
// Or:
var customer = customerViewModel.Map().ToANew();
クエリー・マッピング
エンティティから別のタイプへの使用
var customerVm = await dbContext
.Customers
.Project().To()
.FirstAsync(c => c.Id == customerId);
深度クローン
var clonedCustomer = Mapper.DeepClone(customerToBeCloned);
// Or:
var clonedCustomer = customerToBeCloned.DeepClone();
更新
コマンドを使用して、オブジェクトのメンバーと別の値を更新します.
Mapper.Map(customerSaveRequest).Over(customer);
// Or:
customerSaveRequest.Map().Over(customer);
結合
次の方法を使用して、オブジェクトの未入力メンバーを別の値にマージします.
Mapper.Map(customerDto).OnTo(customer);
// Or:
customerDto.Map().OnTo(customer);
メンバーを無視
ターゲットメンバーが一致するかどうかは、互換性のあるソースメンバーではデフォルトで無視されますが、マッパに無視するように伝えることもできます.
public class OrderDto
{
public int Id { get; set; }
}
public class Order
{
public int? Id { get; set; }
public DateTime DateCreated { get; set; }
}
Order.OrderDtoが一致しないため、DateCreatedは無視されますが、Idプロパティは更新され、更新を停止できます.
Mapper.WhenMapping
.From() // OrderDto
.To() //
.Ignore(o => o.Id); // Id
複数のフィールドを無視し、無視条件を設定
Mapper
.Map(orderDto).Over(order, cfg => cfg
.If((dto, o) => dto.Id == 0) // OrderDto.Id 0
.Ignore(
o => o.Id,
o => o.DateCreated); // Id DateCreated
空の結果
ターゲットクラスメンバーが一致しない場合はnullにマッピングできます.
例:
var source = new { Name = "Frank" };
var target = new Person { Name = "Charlie", Address = default(Address) };
Mapper.Map(source).Over(target);
複雑なタイプを構成nullを返してインスタンス化しない
Mapper.WhenMapping
.ToANew()
.If((o, a) =>
string.IsNullOrWhiteSpace(a.Line1) ||
string.IsNullOrWhiteSpace(a.Postcode))
.MapToNull();