AutoMapper - 2

왜 사용하는가? - 도메인 객체와 viewmodel사이를 매핑해주기 위해서 사용한다. 중요한 것은 전체 어플리케이션에서 한번만 매핑관련 정보를 세팅하고 그걸 계속 사용한다는 것이다.

기본 사용법

public class Invoice
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public DateTime? BillingDate { get; set; }
    public string Po { get; set; }
    public string PreBalance { get; set; }
}

public class InvoiceDetailViewModel
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public string BillingDate { get; set; }
    //DateTime이 아니라 string 인것을 확인
    public string Po { get; set; }
}

중복되지 않은 프로퍼티에 대한 정리

PreBalance는 뷰모델에 넘기지 않는 프로퍼티이다. 오토 매퍼는 이 프로퍼티를 처리하는 방법을 몰라서 에러를 낸다. 다음처럼 정의해줘야 한다.

cfg.CreateMap<Invoice, InvoiceDetailViewModel>()
        .ForMember(dest => dest.PreBalance, opt => opt.Ignore())
        ;

PO가 널일 경우는 - 로 표시되게 한다.

cfg.CreateMap<Invoice, InvoiceDetailViewModel>()
         .ForMember(dest => dest.Po, opt => opt.NullSubstitute("-"))
         ;

상속받은 객체를 매핑하는 방법

class App
{
	public string Name;
}

class Version
{
	public string Name;
	public  App App { get; set; }
}

class Plugin
{
	public string Name
	public Version Version;
}

추가 설명을 하면 plugin 이 version을 가지고 있고 versoin이 app을 가지고 있는 구조이다.

이와 같을때 뷰모델

public class ViewModel
{
	public string P_Name { get; set; }
	public string A_Name { get; set; }
	public string V_Name { get; set; }
}
cfg.CreateMap<Plugin, ViewModel>()
	.ForMember(dest => dest.A_Name, opt => opt.MapFrom(src => src.Version.App.Name))
	.ForMember(dest => dest.V_Name, opt => opt.MapFrom(src => src.Version.Name))
	.ForMember(dest => dest.P_Name , opt => opt.MapFrom(src => src.Name)
	;

혹시 잘못된부분이 있으면 teamsmiley@gmail.com으로 이메일 부탁 드립니다.

관련 글

AutoMapper - 1 https://teamsmiley.github.io/2016/12/22/automapper-1

AutoMapper - 2 https://teamsmiley.github.io/2016/12/23/automapper-2

AutoMapper - 3 https://teamsmiley.github.io/2016/12/23/automapper-3

AutoMapper - 4 https://teamsmiley.github.io/2016/12/23/automapper-4

AutoMapper - 5 https://teamsmiley.github.io/2016/12/26/automapper-5

동영상 강의

http://channel9.msdn.com/posts/ASPNET-MVC-With-Community-Tools-Part-10-AutoMapper

http://www.dnrtv.com/?showNum=155

참고 사이트

https://github.com/AutoMapper/AutoMapper/wiki

http://funnygangstar.tistory.com/entry/AutoMapper%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EA%B0%9D%EC%B2%B4%EA%B0%84-%EB%A7%B5%ED%95%91

teamsmiley's profile image

teamsmiley

2016-12-23 00:00

Read more posts by this author