AutoMapperを使用したリストからオブジェクトへのマッピング

automapper
AutoMapperを使用したリストからオブジェクトへのマッピング

AutoMapperが初めてで、解決しようとしている問題があります。

このようなソースクラスがある場合:

public class Membership
{
    public int MembershipId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string OrganizationName { get; set; }
    public List Addresses { get; set; }
}

Addressクラスは次のようになります。

public class Address
{
    public int AddressId{ get; set; }
    public int RefAddressTypeId { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public bool IsPreferredAddress { get; set; }
}

私の目的クラスは:

public class UserInformationModel
{
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Organization { get; set; }
    public string EmailAddress { get; set; }
    public PhysicalAddress BillingAddress { get; set; }
    public PhysicalAddress ShippingAddress { get; set; }
}

また、宛先アドレスクラスは次のとおりです。

public class PhysicalAddress
{
    public AddressType AddressType{get; set;}
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }

}

私はこのようなマッピングを設定しました:

Mapper.CreateMap()
      .ForMember(dest => dest.Organization, opt => opt.MapFrom(src=>src.OrganizationName));

これはUserInformationModelのメンバーシップで機能していますが、アドレスを機能させる必要があります。 ただし、元のモデルではすべての住所がリストとして保存されているのに対し、送り先は単一の請求先住所と単一の配送先住所であることに注意する必要があります。 リストから配送先住所と請求先住所を見つける方法は、RefAddressTypdIdとIsPreferredAddressを調べることです。 特定のRefAddressTypeIdを持つ優先アドレスは1つだけ存在できます。

だから、私の質問は、AutoMapperをどのようにしてこの種のマッピングを行うのですか? それは可能ですか、それとも通常のマッピングコードを使用する方が良いでしょうか?

  5  3


ベストアンサー

AutoMapperのhttps://github.com/AutoMapper/AutoMapper/blob/master/docs/Custom-value-resolvers.md [カスタム値リゾルバー]機能を使用する必要があります。 そのため、IsPreferredAddressフラグを使用してリストから単一のエンティティにマッピングするカスタムリゾルバーを設定します。

このドキュメントはカスタムリゾルバーに非常に適しているため、そこから問題を解決する必要があります。

7


タイトルとURLをコピーしました