[.net] AutoMapper .ForMember를 사용하는 방법?

Entity에서 DTO로 변환하도록 AutoMapper를 설정하려고합니다. 사용자 지정 매핑을 설정하기 위해 .ForMember()after 를 사용해야한다는 것을 알고 Mapper.CreateMap<Entity, DTO>()있지만 이것은 사용 가능한 방법이 아닌 것 같습니다.

설명 편집 : 내가 읽은 문서에 대한 링크 나 기본 구문에 대한 설명을 찾고 있지 않습니다. 답변 및 설명서에 설명 된대로 올바른 구문을 사용하고 있습니다. 예를 들면 다음과 같습니다.

Mapper.CreateMap<EFAddress, Address>()
      .ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));

CreateMap <> 내에 잘못된 형식 이름이있는 경우 “ForMember”를 유효한 메서드로 볼 수 있습니다. 마우스를 올리면 일반적으로 예상하는 메서드 서명이 표시됩니다. 그러나 두 가지 유효한 유형을 제공하자마자 ForMember는 메서드를 사용할 수없는 것처럼 기호를 확인할 수 없다고 말합니다.

내가 만나지 않는 제네릭 클래스에 어떤 종류의 제약이 있습니까?

감사



답변

다음 구문을 시도하십시오.

Mapper
    .CreateMap<Entity, EntityDto>()
    .ForMember(
        dest => dest.SomeDestinationProperty,
        opt => opt.MapFrom(src => src.SomeSourceProperty)
    );

또는 소스 및 대상 속성의 이름이 단순히 동일한 경우 :

Mapper.CreateMap<Entity, EntityDto>();

자세한 내용 및 기타 매핑 시나리오 는 설명서 의 관련 섹션을 확인하십시오 .


답변

결국 저는 이것이 ReSharper와 일종의 비 호환성으로 판명되었다고 생각합니다.

ReSharper로 인해 Automapper 코드가 잘못 표시되는 것 같지만 정상적으로 작동합니다 (오류 메시지와 함께 빨간색으로 표시 되더라도). ReSharper를 제거하면이 문제가 완전히 해결되었습니다.


답변

샘플 구현은 다음과 같습니다.

Mapper.CreateMap<Game, GameViewModel>()
  .ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type))

Game과 GameViewModel의 속성 이름이 다르기 때문에이 속성을 매핑해야합니다. 동일하고 유형이 같으면 ForMember가 필요하지 않습니다.

ForMember의 또 다른 용도는 매핑을 무시하는 것입니다.

Mapper.CreateMap<Game, GameViewModel>()
    .ForMember(dest => dest.Prize, opt => opt.Ignore());


답변

이 용도뿐만 아니라 :

  CreateMap<Azmoon, AzmoonViewModel>()
            .ForMember(d => d.CreatorUserName, m => m.MapFrom(s =>
 s.CreatedBy.UserName))
            .ForMember(d => d.LastModifierUserName, m => m.MapFrom(s =>
s.ModifiedBy.UserName)).IgnoreAllNonExisting();


답변

이렇게하고 있니

Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)

이 페이지 에는 몇 가지 좋은 예가 있습니다.


답변