IT Share you

Automapper : ReverseMap () 및 ForMember ()를 사용한 양방향 매핑

shareyou 2020. 12. 9. 21:59
반응형

Automapper : ReverseMap () 및 ForMember ()를 사용한 양방향 매핑


엔터티를 뷰 모델에 매핑하고 다시 매핑하려는 경우가 있습니다. 속성이 정확히 동일한 이름을 공유하지 않기 때문에 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가 일치하지 않습니다. (정수는 0입니다.)

이 작업을 수행하는 방법이 있습니까? (두 클래스의 속성이 동일한 이름을 가질 때 작동합니다.) ForMember () 메서드에서 어떤 종류의 옵션을 설정해야합니까?


다음과 같이 구성을 정의 할 수 있습니다.

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>();

더 복잡한 것을 얻으려면 수동으로 구성해야 할 것이 두렵습니다.


ReverseMapIMappingExpression매핑의 반전을 나타내는를 반환합니다 . 일단 전화를 걸면 이후의 전화는 맵 반전을 구성하는 것입니다.

예를 들면 다음과 같습니다.

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

이것은 Pricing반대 방향 필드를 무시합니다 .

참고 URL : https://stackoverflow.com/questions/13490456/automapper-bidirectional-mapping-with-reversemap-and-formember

반응형