애플리케이션을 만들어 보다 보면 아주 많은 클래스들을 만들게 되는데요, 데이터베이스 (Entity Framework) 나 Web Api를 이용하다 보면 소스 클래스에서 애플리케이션에 이용할 다른 클래스로 Conversion과 Mapping을 해야 하는 경우가 종종 있습니다. 하지만 거의 Property 이름이 같은 경우가 많죠.
AutoMapper
What is AutoMapper? AutoMapper is a simple little library built to solve a deceptively complex problem - getting rid of code that mapped one object to another. This type of code is rather dreary and boring to write, so why not invent a tool to do it for us
automapper.org
Automapper는 생성된 클래스와 생성하려고 하는 클래스가 비슷할 시에 쉽게 단 몇 줄로 Conversion과 Mapping을 해주는 툴입니다.
Visual Studio의 Package Manager에서 바로 아래 커멘드로 프로젝트에 설치를 할 수 있습니다
Install-Package AutoMapper
아니면 NuGet에서 다운로드하여 설치할 수 있습니다.
우선 아래의 예제와 같이 mapper configuration을 생성합니다. configuration을 사용하여 매핑을 하고 새 클래스를 만듭니다.
예제는 Order 클래스를 OrderDto 클래스로 컨버젼 및 매핑을 하는 코드입니다.
var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
var mapper = new Mapper(config);
OrderDto dto = mapper.Map<OrderDto>(order);
하지만 대부분의 케이스가 클래스에 속한 Property 이름이 다른 경우가 많죠. 위의 예제는 모두 같은 경우이고 아래는 링크 (LINQ) 함수를 이용하여 다른 이름들을 configuration 생성 시 매핑을 하는 코드입니다.
var config = new MapperConfiguration(
cfg => cfg.CreateMap<Order, OrderDto>().ForMember(
dest => dest.OrderName,
opt => opt.MapFrom(src => src.OrderTitle)));
var mapper = new Mapper(config);
OrderDto dto = mapper.Map<OrderDto>(order);
위의 코드는 OrderDto 가 OrderName이라는 Property를 가지고 있지만 Order 클래스에선 같은 Property 가 이름이 OrderTitle이라고 다를 경우 OrderName을 OrderTitle에 매핑하고 있습니다. 그렇게 되면 OrderDto의 OrderName는 Order 클래스의 OrderTitle 이 가지고 있는 데이터로 매핑이 됩니다.
간단하지요? 수고하셨습니다.
도움이 되셨거나 즐거우셨다면 아래의 ❤️공감버튼이나 구독버튼을 눌러 주세요~ 감사합니다
https://docs.automapper.org/en/latest/Getting-started.html
Getting Started Guide — AutoMapper documentation
What is AutoMapper? AutoMapper is an object-object mapper. Object-object mapping works by transforming an input object of one type into an output object of a different type. What makes AutoMapper interesting is that it provides some interesting conventions
docs.automapper.org
쿠버네티스 (Kubernetes)에서 프로메테우스 (Prometheus) 와 그라파나 (Grafana) 설치 - 완결편 - PART 1 (0) | 2022.12.19 |
---|---|
Table-Valued Function (TVF) - T-SQL (0) | 2022.12.12 |
Azure AKS (에저 쿠버네티스 서비스) 에서 Prometheus (프로메테우스) 와 Grafana (그라파나) 설치 - Powershell (0) | 2022.12.02 |
모든 환경에서 사용가능한 JavaScript (자바스크립트) 팝업 창 코드 (0) | 2022.12.02 |
.NET gRPC 서버 제작과 gRPC-Web 기능 넣기 (0) | 2022.11.28 |