백엔드 개발 C#.Net 튜토리얼 AutoMapper를 사용하여 Dto와 Model 간의 무료 변환 달성(가운데)

AutoMapper를 사용하여 Dto와 Model 간의 무료 변환 달성(가운데)

Dec 20, 2016 am 11:30 AM
c#

참고: 이 기사 시리즈의 코드는 여기에서 다운로드할 수 있습니다.

이전 기사에서는 모델, Dto 및 이들 간의 변환 규칙을 포함하여 완전한 애플리케이션 시나리오를 구성했습니다. 이제 소매를 걷어붙이고 AutoMapper 여행을 시작할 수 있습니다.
[2] 컨벤션 모드에서 제로 구성 객체 매핑 구현
AddressDto와 Address 구조는 정확히 동일하며 필드 이름도 정확히 동일합니다. 이러한 유형 변환을 위해 AutoMapper는 공식 웹사이트에 명시된 대로 규칙을 제공합니다.

인용

AutoMapper는 규칙 기반 일치 알고리즘을 사용하여 소스와 대상 값을 일치시킵니다.


우리가 해야 할 일은 AutoMapper에 매핑할 두 가지 유형을 알려주는 것뿐입니다(Mapper 클래스의 정적 메서드 CreateMap을 호출하고 매핑할 유형을 전달합니다).

C# 코드

Mapper.CreateMap();


그런 다음 모든 작업을 AutoMapper에 맡기면 됩니다.

C# 코드

AddressDto dto = 새 AddressDto

{

국가 = "중국",

도시 = "베이징",

거리 = "동직문 거리",

PostCode = "100001"

}

주소 주소 = Mapper.Map(Dto) ;

address.Country.ShouldEqual("중국");

address.City.ShouldEqual("베이징")

address.Street.ShouldEqual("동직문 거리 ");

address.PostCode.ShouldEqual("100001");


AddressDto에 값이 비어 있는 속성이 있으면 AutoMapper는 Address에도 해당 속성을 설정합니다. 매핑이 비어 있는 경우:

C# 코드

주소 주소 = Mapper.Map(new AddressDto

{

중국"

                                                                                 treet.ShouldBeNull( );

address.PostCode.ShouldBeNull ();

빈 AddressDto가 전달되더라도 AutoMapper는 우리를 도와줄 것입니다. 빈 Address 객체를 얻습니다.

C# 코드

주소 주소 = Mapper.Map(null)

address.ShouldBeNull();

이 컨벤션 매핑 방법을 "장난감"으로 생각하지 마십시오. 동일한 필드 이름을 가진 복잡한 유형을 매핑할 때 여전히 상당한 힘을 발휘합니다.

예를 들어 BookStoreDto와 BookStore 매핑을 생각해 보세요. 두 필드 이름은 정확히 동일하지만 필드 유형은 일관되지 않습니다. BookDto에서 Book으로의 매핑 규칙과 위의 컨벤션 방법에서 AddressDto에서 Address로의 매핑을 정의한 경우 "제로 구성"을 사용하여 BookStoreDto에서 BookStore로의 매핑을 구현할 수 있습니다.

C# 코드


IMappingExpression 식 = Mapper.CreateMap();

// BookDto에서 Book here로의 매핑 규칙 정의

Mapper . CreateMap();

Mapper.CreateMap()

그런 다음 BookStoreDto를 직접 변환할 수 있습니다.

🎜>C# 코드

BookStoreDto dto = new BookStoreDto


                                 

                         이름 = "내 매장",  

                       주소 = 새 AddressDto  

             >                                },  

                          도서 = 새 목록  

                                     {  

                                                    새 BookDto {제목 = " RESTful Web Service"},  

                                      new BookDto {Title = "Ruby for Rails"},  

                                       }

                      };  

서점 bookStore = Mapper.Map(dto);  

bookStore.Name.ShouldEqual("내 상점");  

bookStore.Address.City.ShouldEqual("베이징");  

bookStore.Books.Count.ShouldEqual(2);  

bookStore.Books.First().Title.ShouldEqual("RESTful 웹 서비스");  

bookStore.Books.Last().Title.ShouldEqual("Rails용 루비");  

【三】义类型间的简单映射规则 

앞면에서 Conventional映射方式,客观的说还是有很多类型间的映射是无法过简单의 컨벤션 방법 우리는 구성을 사용하고 있습니다. 우리의 구성은 "强类型"에 맞는 방법으로, 比写繁琐易错的xml方式是要好的多了。 

先来看看BookDto到Publisher的映射。

回顾一下前文中定义的规则:BookDto.Publisher -> 게시자.이름。 
재AutoMapperzhong,我们可以这样映射: 


C#代码  

var map = Mapper.CreateMap();  

map.ForMember(d => d.Name, opt => opt.MapFrom(s => s.Publisher));  

还好有强大 lambda表达式, 规则 의 결정에 따라 결정됩니다. 당신은 모든 것을 알고 있습니다.例如我们要定义BookDto到第一작품자(저자) 的ContactInfo的映射,使用ConstructUsing方式,我们可以: 

C#代码  

var map = Mapper.CreateMap ();  

map.ConstructUsing(s => new ContactInfo

                               블로그 = s.FirstAuthorBlog,

🎜> Twitter = s.FirstAuthorTwitter

 

BookDto dto = new BookDto

                                                                                              

FirstAuthorBlog = "matt.amazon.com",

> 두 개의 매핑된 유형에 일부 필드가 있음 이름은 동일하지만 일부 필드 이름 다른가요? 다행스럽게도 AutoMapper가 제공하는 규칙 또는 구성 방법은 "XOR"이 아닙니다. 두 방법을 조합하여 이름이 다른 필드에 대한 매핑 규칙을 구성하고 동일한 이름을 가진 필드에 대한 구성을 무시할 수 있습니다.
예를 들어 앞서 언급한 AddressDto에서 Address로의 매핑의 경우 AddressDto의 Country 필드가 Country가 아니라 CountryName이라고 하면 AddressDto에서 Address로 매핑 규칙을 작성할 때 다음만 필요합니다.

C# 코드

var map = Mapper.CreateMap()

map.ForMember(d => d.Country, opt => opt .MapFrom(s => ; s.CountryName));

도시, 거리 및 우편 번호에 대한 규칙을 정의할 필요가 없지만 AutoMapper는 여전히 올바른 매핑을 수행하는 데 도움이 될 수 있습니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C#을 사용한 Active Directory C#을 사용한 Active Directory Sep 03, 2024 pm 03:33 PM

C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 난수 생성기 C#의 난수 생성기 Sep 03, 2024 pm 03:34 PM

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 데이터 그리드 보기 C# 데이터 그리드 보기 Sep 03, 2024 pm 03:32 PM

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

C#의 팩토리얼 C#의 팩토리얼 Sep 03, 2024 pm 03:34 PM

C#의 팩토리얼 가이드입니다. 여기서는 다양한 예제 및 코드 구현과 함께 C#의 계승에 대한 소개를 논의합니다.

멀티 스레딩과 비동기 C#의 차이 멀티 스레딩과 비동기 C#의 차이 Apr 03, 2025 pm 02:57 PM

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.

C#의 패턴 C#의 패턴 Sep 03, 2024 pm 03:33 PM

C#의 패턴 가이드. 여기에서는 예제 및 코드 구현과 함께 C#의 패턴 소개 및 상위 3가지 유형에 대해 설명합니다.

C#의 소수 C#의 소수 Sep 03, 2024 pm 03:35 PM

C#의 소수 가이드. 여기서는 코드 구현과 함께 C#의 소수에 대한 소개와 예를 논의합니다.

XML 형식을 변경하는 방법 XML 형식을 변경하는 방법 Apr 03, 2025 am 08:42 AM

XML 형식을 수정하는 방법에는 여러 가지가 있습니다. Notepad와 같은 텍스트 편집기로 수동으로 편집; XMLBeautifier와 같은 온라인 또는 데스크탑 XML 서식 도구와 자동 포맷; XSLT와 같은 XML 변환 도구를 사용하여 변환 규칙을 정의합니다. 또는 Python과 같은 프로그래밍 언어를 사용하여 구문 분석하고 작동합니다. 원본 파일을 수정하고 백업 할 때주의하십시오.

See all articles