AutoMapper를 사용하여 Dto와 Model 간의 무료 변환 달성(가운데)
참고: 이 기사 시리즈의 코드는 여기에서 다운로드할 수 있습니다.
이전 기사에서는 모델, Dto 및 이들 간의 변환 규칙을 포함하여 완전한 애플리케이션 시나리오를 구성했습니다. 이제 소매를 걷어붙이고 AutoMapper 여행을 시작할 수 있습니다.
[2] 컨벤션 모드에서 제로 구성 객체 매핑 구현
AddressDto와 Address 구조는 정확히 동일하며 필드 이름도 정확히 동일합니다. 이러한 유형 변환을 위해 AutoMapper는 공식 웹사이트에 명시된 대로 규칙을 제공합니다.
인용
AutoMapper는 규칙 기반 일치 알고리즘을 사용하여 소스와 대상 값을 일치시킵니다.
우리가 해야 할 일은 AutoMapper에 매핑할 두 가지 유형을 알려주는 것뿐입니다(Mapper 클래스의 정적 메서드 CreateMap을 호출하고 매핑할 유형을 전달합니다).
C# 코드
Mapper.CreateMap
그런 다음 모든 작업을 AutoMapper에 맡기면 됩니다.
C# 코드
AddressDto dto = 새 AddressDto
{
국가 = "중국",
도시 = "베이징",
거리 = "동직문 거리",
PostCode = "100001"
}
주소 주소 = Mapper.Map
address.Country.ShouldEqual("중국");
address.City.ShouldEqual("베이징")
address.Street.ShouldEqual("동직문 거리 ");
address.PostCode.ShouldEqual("100001");
AddressDto에 값이 비어 있는 속성이 있으면 AutoMapper는 Address에도 해당 속성을 설정합니다. 매핑이 비어 있는 경우:
C# 코드
주소 주소 = Mapper.Map
{
중국"
treet.ShouldBeNull( );
address.PostCode.ShouldBeNull ();
빈 AddressDto가 전달되더라도 AutoMapper는 우리를 도와줄 것입니다. 빈 Address 객체를 얻습니다.C# 코드
주소 주소 = Mapper.Map
address.ShouldBeNull();
이 컨벤션 매핑 방법을 "장난감"으로 생각하지 마십시오. 동일한 필드 이름을 가진 복잡한 유형을 매핑할 때 여전히 상당한 힘을 발휘합니다.예를 들어 BookStoreDto와 BookStore 매핑을 생각해 보세요. 두 필드 이름은 정확히 동일하지만 필드 유형은 일관되지 않습니다. BookDto에서 Book으로의 매핑 규칙과 위의 컨벤션 방법에서 AddressDto에서 Address로의 매핑을 정의한 경우 "제로 구성"을 사용하여 BookStoreDto에서 BookStore로의 매핑을 구현할 수 있습니다.
C# 코드
IMappingExpression
// BookDto에서 Book here로의 매핑 규칙 정의
Mapper . CreateMap
Mapper.CreateMap
이름 = "내 매장",
주소 = 새 AddressDto
> },
도서 = 새 목록
{
새 BookDto {제목 = " RESTful Web Service"},
new BookDto {Title = "Ruby for Rails"},
}
};
서점 bookStore = Mapper.Map
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는 여전히 올바른 매핑을 수행하는 데 도움이 될 수 있습니다.
핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

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

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

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

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

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