2

automapper を使用してディープ オブジェクトをフラット オブジェクトに変換し、元に戻すにはどうすればよいですか?

例えば:

Person 
{
    public string Name { get; set; }
    public Address Address { get; set; }
}

Address
{
    public string City { get; set; }
    public string State { get; set; }
}

FlatObject
{
    public string Name { get; set; }
    public string City { get; set; }
    public string State { get; set; }
}
4

3 に答える 3

6

これを実現するには、次の 2 つの方法があります。

  1. からのマッピングと からのマッピングの 2 つを定義FlatObject --> PersonFlatObject --> Addressます。

    Mapper.CreateMap<FlatObject, Address>();
    
    Mapper.CreateMap<FlatObject, Person>()
        .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src));
    
  2. 1 つのマッピングをAddress定義し、マッピング定義内にオブジェクトを作成します。

    Mapper.CreateMap<FlatObject, Person>()
        .ForMember(
            dest => dest.Address, 
            opt => opt.MapFrom(
                src => new Address { City = src.City, State = src.State }));
    

個人的には、オプション 1 を使用します。この方法で にプロパティを追加するとFlatObject、マッピング定義の更新について心配する必要がなくなります (オプション 2 を使用した場合)。

ただし、@Raphaëlは、ドメイン オブジェクトへのマッピングの有効性を疑問視する著者のリンクを指摘する点で正しいです。

于 2013-09-06T20:12:44.270 に答える
0

まあ、AutoMapperは「自動」平坦化には問題ありません。あなたの場合、命名規則を尊重してください

FlatObject {
  public string Name {get;set;}
  public string AddressCity {get;set;}
  public string AddressState {get;set;}
}

しかし、私の知る限り、AutoMapper は unflattening を行いません。

ライブラリの作者からこれを参照してください。

それらは、 ValueInjecterのように、(他の種類の制限付きで) それを行う他のツールです。

于 2013-09-06T20:02:18.567 に答える