[C#] 속성 이름이 다른 경우 매핑 규칙을 지정하는 방법

저는 Automapper 프레임 워크의 초보자입니다. 다음과 같이 도메인 클래스와 DTO 클래스가 있습니다.

public class Employee
{
   public long Id {get;set;}
   public string Name {get;set;}
   public string Phone {get;set;}
   public string Fax {get;set;}
   public DateTime DateOfBirth {get;set;}
}

public class EmployeeDto
{
   public long Id {get;set;}
   public string FullName {get;set;}
   public DateTime DateOfBirth {get;set;}
}

참고 : 클래스의 ” Name ” 속성 이름Employee클래스의 ” FullName ” 속성 이름 과 다릅니다 EmployeeDto.

다음은 Employee객체를 매핑하는 코드입니다 EmployeeDto.

Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 

내 질문은 : Employee(소스 클래스)를 EmployeeDto(대상 클래스)에 매핑하려면 매핑 규칙을 어떻게 지정할 수 있습니까? 다시 말해, 위의 코드 줄 (***)로 어떻게 더 많은 것을해야합니까?



답변

신경 쓰지 마라. 나는 스스로 해결책을 찾았다.

Mapper.CreateMap<Employee, EmployeeDto>()
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));


답변

Automapper 8.1 이상을 사용하여 위의 주석을 업데이트 된 접근 방식으로 롤링하십시오 …

var mapConfig = new MapperConfiguration(
   cfg => cfg.CreateMap<Employee, EmployeeDto>()
      .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
);

그런 다음 mapConfig를 사용하여 매퍼를 빌드합니다.

var mapper = mapConfig.CreateMapper();


답변

매핑을 위해 클래스 속성을 지정할 수도 있습니다

에서 https://docs.automapper.org/en/stable/Conventions.html#attribute-support

속성 지원

AddMemberConfiguration().AddName<SourceToDestinationNameMapperAttributesMember>();
* 현재는 항상 켜져 있습니다

속성 / 필드에 대한 SourceToDestinationMapperAttribute 인스턴스를 찾고 사용자 정의 isMatch 함수를 호출하여 멤버 일치를 찾습니다.

MapToAttribute는 제공된 이름을 기준으로 속성과 일치하는 것 중 하나입니다.

public class Foo
{
    [MapTo("SourceOfBar")]
    public int Bar { get; set; }
}

답변