저는 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; } }