73

エンティティをビューモデルにマップして戻したい場合があります。ForMember()それらのプロパティはまったく同じ名前を共有していないため、マッピングを明示的に指定する必要があります。これが私のクラスがどのように見えるかの短い例です:

public class PartTwo {
    public int Integer { get; set; }
}

public class PartTwoViewModel {
    public int PartInteger { get; set; }
}

そして、私はそれらをこのように使用したいと思います:

Mapper.CreateMap<PartTwo, PartTwoViewModel>()
    .ForMember(dst => dst.PartInteger, opt => opt.MapFrom(src => src.Integer))
    .ReverseMap();

var partTwoViewModel = new PartTwoViewModel() { PartInteger = 42 };
var partTwo = Mapper.Map<PartTwoViewModel, PartTwo>(partTwoViewModel);
Assert.AreEqual(partTwoViewModel.PartInteger, partTwo.Integer);

PartIntegerただし、プロパティはに一致しませんInteger。(Integerです0。)

これを機能させる方法はありますか?(両方のクラスのプロパティが同じ名前の場合は機能します。)メソッドに何らかのオプションを設定する必要がありますForMember()か?

4

2 に答える 2

160

ReverseMapIMappingExpressionマッピングの反転を表す を返します。一度呼び出すと、それ以降の呼び出しはマップの反転を構成するためのものになります。

次に例を示します。

Mapper.CreateMap<CartItemDto, CartItemModel>()
      .ForMember(dest => dest.ExtendedCost, opt => opt.Ignore())
      .ReverseMap()
          .ForMember(dest => dest.Pricing, opt => opt.Ignore())

Pricingこれにより、逆方向のフィールドが無視されます。

于 2013-08-28T13:57:57.693 に答える
56

次のように構成を定義できます。

Mapper.CreateMap<PartTwo, PartTwoViewModel>()
    .ForMember(dst => dst.PartInteger, opt => opt.MapFrom(src => src.Integer));

Mapper.CreateMap<PartTwoViewModel, PartTwo>()
    .ForMember(dst => dst.Integer, opt => opt.MapFrom(src => src.PartInteger));

アップデート

最初に実装されたコミットは次のとおりです。ReverseMapコードで確認できることから、単純な逆マッピングのみが作成されます。たとえば、この場合、次のように自動的に構成されます。

Mapper.CreateMap<PartTwoViewModel, PartTwo>();

より複雑なものを取得するには、手動で構成する必要があります。

于 2012-11-21T10:30:15.293 に答える