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)
이 페이지 에는 몇 가지 좋은 예가 있습니다.