Profile의 역할: 방대한 매핑 규칙을 독립적인 클래스로 분리하여 Main 메서드에 모두 몰아넣지 않고, 여러 엔티티 매핑을 쉽게 관리할 수 있게 합니다.
1. 커스텀 Profile 클래스
AutoMapper가 제공하는 Profile을 상속받아 생성자 안에 매핑 관계를 작성하며, CreateMap을 여러 개 한꺼번에 쓸 수 있습니다.
using AutoMapper;
/// <summary>
/// 매핑 구성 클래스
/// </summary>
public class MappingProfile : Profile
{
public MappingProfile()
{
// Person → People
CreateMap<Person, People>();
// People → Person, 양방향 매핑
CreateMap<People, Person>();
}
}
// [코드 블록 내 중국어 번역]
// 매핑 구성 클래스
// Person → People
// 양방향 매핑
Code language: HTML, XML (xml)
방법 1: 초기화 시 Profile 추가
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
Code language: JavaScript (javascript)
방법 2: 전체 구문, Profile 객체 인스턴스화
var mc = new MapperConfigurationExpression();
mc.AddProfile(new MappingProfile());
Mapper.Initialize(mc);
// [코드 블록 내 중국어 번역]
// Profile 객체 인스턴스화
Code language: JavaScript (javascript)
2. 여러 Profile 로드하기
프로젝트 비즈니스가 복잡해지면 Profile 클래스를 여러 개로 분리하게 됩니다. 한 번에 모두 등록할 수 있습니다:
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
x.AddProfile<MappingProfile2>();
});
Code language: HTML, XML (xml)
전체 Program 예제
class Program
{
static void Main(string[] args)
{
// ========= 구성: Profile 매핑 로드 =========
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
// 소스 객체, 대상 객체
Person p = new Person()
{
Age = 12,
Name = "Tom",
Birthday = DateTime.Now,
Sex = true,
Salary = 10000
};
People peo = new People()
{
Age = 36,
Name = "Jack",
Birthday = DateTime.Now,
Sex = true,
Salary = 102000
};
// 정방향 매핑 Person → People
Mapper.Map(p, peo);
// 역방향 매핑 People → Person
Mapper.Map(peo, p);
Console.WriteLine(peo.Name);
Console.WriteLine(p.Name);
Console.ReadKey();
}
}
// [코드 블록 내 중국어 번역]
// 구성: Profile 매핑 로드
// 소스 객체, 대상 객체
// 정방향 매핑 Person → People
// 역방향 매핑 People → Person
Code language: JavaScript (javascript)
Profile 구성
Previous: 설치 및 첫 번째 예제
Next: 평탄화 매핑 (Flattening)