C #에서 AutoMapper를 사용하는 방법

AutoMapper는 다른 유형에 속하는 개체를 매핑하는 데 사용할 수있는 인기있는 개체 대 개체 매핑 라이브러리입니다. 예를 들어 응용 프로그램의 DTO (데이터 전송 개체)를 모델 개체에 매핑해야 할 수 있습니다. AutoMapper는 이러한 호환되지 않는 유형의 속성을 하나 이상 수동으로 매핑해야하는 지루한 노력을 덜어줍니다.

AutoMapper 작업을 시작하려면 Visual Studio에서 프로젝트를 만든 다음 AutoMapper를 설치해야합니다. NuGet 패키지 관리자 콘솔 창에서 다음 명령을 사용하여 NuGet에서 AutoMapper를 설치할 수 있습니다.

PM> 패키지 설치 AutoMapper

AutoMapper를 사용하여 매핑 만들기

AutoMapper와 같은 객체 대 객체 매퍼는 한 유형의 입력 객체를 다른 유형의 출력 객체로 변환합니다. 다음 두 클래스를 고려하십시오.

 공용 클래스 AuthorModel

    {

        공개 정수 ID

        {

            가져 오기; 세트;

        }

        공용 문자열 FirstName

        {

            get; set;

        }

        공용 문자열 LastName

        {

            가져 오기; 세트;

        }

        공용 문자열 주소

        {

            가져 오기; 세트;

        }

    }

 공용 클래스 AuthorDTO

    {

        공개 정수 ID

        {

            가져 오기; 세트;

        }

        공용 문자열 FirstName

        {

            가져 오기; 세트;

        }

        공용 문자열 LastName

        {

            가져 오기; 세트;

        }

        공용 문자열 주소

        {

            가져 오기; 세트;

        }

    }

다음 코드 스 니펫은 AuthorModel과 AuthorDTO의 두 유형간에 맵을 만드는 방법을 보여줍니다.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

그런 다음 유형 간의 매핑을 수행하는 것은 다음 코드가 보여주는 것처럼 간단합니다.

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

var destination = iMapper.Map (source);

AutoMapper 예제 

이제 일부 데이터로 작업 해 봅시다. 일부 데이터를 소스 개체에 저장 한 다음 매핑이 완료된 후 대상 개체에 속성 값을 표시하는 다음 코드를 참조하십시오.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

source.Id = 1;

source.FirstName = "조이 디프";

source.LastName = "칸 질랄";

source.Address = "인도";

var destination = iMapper.Map (source);

Console.WriteLine ( "저자 이름 :"+ destination.FirstName + ""+ destination.LastName);

위의 코드를 실행하면 대상 객체에 저장된 작성자 이름이 표시됩니다. 그러나 AutoMapper를 사용하여 개체를 성공적으로 매핑했기 때문에 대상 FirstName 및 대상 LastName 속성의 값은 원본 개체와 동일합니다!

AutoMapper는 모든 클래스 집합을 매핑 할 수 있습니다. 그러나 AutoMapper는 매핑되는 속성 이름이 동일한 이름을 가져야한다는 특정 규칙을 따릅니다. 속성 이름이 동일하지 않은 경우 AutoMapper에 속성 매핑 방법을 알려야합니다. Contact 및 ContactDetails 두 속성을 매핑한다고 가정하면 다음 예제에서는이를 수행하는 방법을 보여줍니다.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                .ForMember (destination => destination.ContactDetails,

               opts => opts.MapFrom (source => source.Contact));

            });

대상 개체를 만드는 데 사용되는 다음 문에 유의하십시오.

var destination = iMapper.Map (source);

대상 개체가 이미있는 경우 대신 아래 문을 사용할 수 있습니다.

iMapper.Map (sourceObject, destinationObject);

본질적으로 위의 코드 조각을 사용하여 이미 존재하는 두 개체를 매핑 할 수 있습니다.

AutoMapper에서 투영 사용

AutoMapper는 투영에 대한 탁월한 지원을 제공합니다. 투영은 소스의 구조와 일치하지 않는 대상에 소스 값을 매핑하는 데 사용됩니다. (반대로 위에서 논의한 매핑은 일대일 매핑이었습니다.)

이제 투영을 살펴 보겠습니다. 예를 들어, 다음 클래스를 고려하십시오.

 공개 수업 주소

    {

        public string City {get; 세트; }

        public string State {get; 세트; }

        public string Country {get; 세트; }

    }

AuthorModel 클래스가 Address 클래스를 사용하여 작성자의 주소 정보를 저장하도록하겠습니다. 업데이트 된 AuthorModel 클래스는 다음과 같습니다.

 공용 클래스 AuthorModel

    {

        공개 정수 ID

        {

            가져 오기; 세트;

        }

        공용 문자열 FirstName

        {

            get; set;

        }

        공용 문자열 LastName

        {

            가져 오기; 세트;

        }

        공개 주소 주소

        {

            가져 오기; 세트;

        }

    }

 그리고 여기에 업데이트 된 AuthorDTO 클래스가 있습니다.

공용 클래스 AuthorDTO

    {

        공개 정수 ID

        {

            가져 오기; 세트;

        }

        공용 문자열 FirstName

        {

            가져 오기; 세트;

        }

        공용 문자열 LastName

        {

            가져 오기; 세트;

        }

        public string City {get; 세트; }

        public string State {get; 세트; }

        public string Country {get; 세트; }

    }

이제 AuthorDTO 및 AuthorModel 클래스를 매핑해야한다고 가정합니다. 다음 코드 스 니펫은이를 달성하는 방법을 보여줍니다.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                   .ForMember (destination => destination.Address,

              map => map.MapFrom (

                  소스 => 새 주소

                  {

                      City = 소스 .City,

                      상태 = 소스 .State,

                      국가 = 출처. 국가

                  }));

AutoMapper의 고급 기능에 대해서는 향후 게시물에서 설명하겠습니다. 그때까지는이 링크에서 AutoMapper에 대해 자세히 알아볼 수 있습니다.

C #에서 더 많은 작업을 수행하는 방법 :

  • C #에서 추상 클래스와 인터페이스를 사용하는 경우
  • C #에서 AutoMapper를 사용하는 방법
  • C #에서 람다 식을 사용하는 방법
  • C #에서 Action, Func 및 Predicate 대리자를 사용하는 방법
  • C #에서 대리자를 사용하는 방법
  • C #에서 간단한 로거를 구현하는 방법
  • C #에서 특성을 사용하는 방법
  • C #에서 log4net으로 작업하는 방법
  • C #에서 리포지토리 디자인 패턴을 구현하는 방법
  • C #에서 리플렉션을 사용하는 방법
  • C #에서 filesystemwatcher로 작업하는 방법
  • C #에서 지연 초기화를 수행하는 방법
  • C #에서 MSMQ를 사용하는 방법
  • C #에서 확장 메서드를 사용하는 방법
  • C #에서 람다 식 사용 방법
  • C #에서 volatile 키워드를 사용하는 경우
  • C #에서 yield 키워드를 사용하는 방법
  • C #에서 다형성을 구현하는 방법
  • C #에서 자신 만의 작업 스케줄러를 빌드하는 방법
  • C #에서 RabbitMQ로 작업하는 방법
  • C #에서 튜플을 사용하는 방법
  • C #에서 가상 및 추상 메서드 탐색