>  기사  >  백엔드 개발  >  OOM에서 AutoMapper 사용 소개

OOM에서 AutoMapper 사용 소개

Y2J
Y2J원래의
2017-05-06 11:37:571642검색

이 기사에서는 주로 OOM 프레임워크 AutoMapper에 대한 관련 지식을 소개합니다. 이 기사의 다섯 가지 예는 일반적인 기본 문제를 해결하는 데 도움이 될 수 있습니다. 일정한 참조값이 있으니 아래 에디터로 살펴보자

앞에

OOM이 적혀 있는데, 이름에서 알 수 있듯이 Object-Object-Mapping 엔터티입니다. ViewModel과 엔터티 간 변환, SearchModel과 엔터티 간 변환 등 단순하고 번거로운 엔터티 간의 관계를 수작업 없이 변환할 수 있도록 도와준다는 의미이기도 합니다. 제가 공유하는 것은 인터넷에 공유되는 대부분의 방법이 몇 년 전이었고, 많은 방법이 버려졌다는 것입니다. 당신이 그것을 얻을 때, 컴파일러는 그 방법이 오래되었고, 버려졌으며, 사용을 권장하지 않는다는 것을 알려줄 것입니다. 물론 Mapper.CreateMap 및 기타 방법과 같은 대부분의 숙련된 드라이버는 github에 직접 가서 문서를 읽거나 Google에서 알아낼 수 있지만 중국어 정보에는 포기된 방법에 대한 설명이 없습니다. 이 기사의 다섯 가지 예는 일반적인 기본 문제를 해결하는 데 도움이 될 수 있습니다.

준비

먼저 몇 가지 ViewModel과 TModel을 준비합니다. ViewModel은 사용자와 상호작용하는 엔터티입니다. TModel은 데이터베이스를 처리하는 데 사용하는 엔터티입니다.

엔터티는 다음과 같이 표시됩니다.

TModel에는 다음과 같은 세 가지 단순 엔터티가 있으며, 독립 엔터티와 일대다 엔터티가 있습니다.

public class TAddress
{
 public string Country { get; set; }
 public string City { get; set; }
 public string Street { get; set; }
 public string PostCode { get; set; }
 public string CreateTime { get; set; }
 public int CreateUserId { get; set; }
}
public class TAuthor
 {
  public string Name { get; set; }
  public string Description { get; set; }
  public List<TContactInfo> ContactInfo { get; set; }
 }
 public class TContactInfo
 {
 public int Id { get; set; }
 public string Email { get; set; }
 public string Blog { get; set; }
 public string Twitter { get; set; }
 }

ViewModel은 다음과 같습니다.

public class VM_Address
 {
 public string Country { get; set; }
 public string City { get; set; }
 public string City2 { get; set; }
 }
 public class VM_Author
 {
 public string Name { get; set; }
 public string Description { get; set; }
 public List<VM_ContactInfo> ContactInfo { get; set; }
 }
 public class VM_ContactInfo
 {
 public int Id { get; set; }
 public string Email { get; set; }
 public string Blog { get; set; }
 public string Twitter { get; set; }
 }

단일 엔터티 변환

단일 엔터티를 변환하는 경우 속성 필드에 이름 정확히 일치하는 경우 소스 엔터티와 대상 엔터티를 지정하여 두 엔터티 간의 변환 규칙만 지정하면 됩니다. 그런 다음 다음 예를 참조해야 합니다.

VM_Address dto = new VM_Address
  {
  Country = "China",
  City = "Beijing"
  };
  Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>());
  TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

AutoMapper5.x에서는 규칙을 초기화하기 위해 초기화를 선호합니다.

변환 규칙을 지정한 후 Map 메소드를 사용하여 대상 엔터티를 변환하고 출력하세요. 첫 번째 매개변수는 SourceModel을 나타내고, 두 번째 매개변수는 DestinationModel입니다.

단일 엔터티에 대해 서로 다른 이름을 가진 속성 변환

다른 이름을 가진 필드를 변환해야 하는 경우 매핑 시에는 ForMember 방식을 사용하시기 바랍니다. 두 번째 매개변수에는 제가 선택한 필드 속성의 동작을 지정해 주셔야 합니다. 이것이 제공하는 MapFrom 메소드는 대상 엔터티의 City 소스를 소스 엔터티의 City2 속성 값으로 지정해야 한다고 AutoMapper에 알리는 것입니다.

VM_Address dto = new VM_Address
  {
  Country = "China",
  City2 = "Beijing"
  };
  Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>().ForMember(x => x.City, opt => opt.MapFrom(o => o.City2)));
  TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

변환 설정

컬렉션 간 변환 시 대상 목록과 원본 목록객체 간의 일치를 구성할 필요가 없습니다. 그러나 일반 개체의 매핑 일치 관계만 구성해야 합니다.

  TAddress address = new TAddress { Country = "China", City = "Beijing" };
  TAddress address2 = new TAddress() { Country = "USA", City = "New York" };
  List<TAddress> addressList = new List<TAddress>() { address2, address };
  Mapper.Initialize(m => m.CreateMap<TAddress, VM_Address>());//这里仅需配置实体间的转换,而不是实体集合的转换
  List<VM_Address> res = Mapper.Map<List<TAddress>, List<VM_Address>>(addressList);

엔티티에 다양한 유형의 속성 변환이 포함되어 있습니다(속성 무시)

엔티티에 다양한 유형의 속성이 포함된 경우(예: TModel1에는 List11f78692f20056f47499444c397f8bca이 포함되어 있습니다. 이때 이 속성을 무시하도록 선택할 수 있습니다

 var contacts = new List<TContactInfo>() { new TContactInfo() 
          { Blog = "myblog", Email = "ws@qq.com" }, new TContactInfo() { Blog = "myblog", Email = "ll@qq.com" } };
  TAuthor author = new TAuthor() { Description = "描述", Name = "吴双", ContactInfo = contacts };
  Mapper.Initialize(m => { m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.Ignore()); });
       VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);
//这里的Ignore代表配置ContractInfo该属性的操作 为 忽略Ignore,映射时将忽略该属性 由于List<TContactInfo>()和List<VM_ContactInfo>() 是不同类型,所以需要配置忽略或者是特殊映射,特殊映射例子看下方

엔티티에는 다양한 유형의 속성 변환(지정된 Mapfrom 속성)이 포함되어 있습니다

물론 이 속성이 필요할 때 무시할 필요는 없지만 MapFrom을 사용하여 구체적으로 지정하고, 유형이 다를 경우 두 유형 간의 매핑 관계를 지정해야 합니다. 아래 예시와 같이

m.CreateMap775d38cc2051b2bc0f39739d39ab1b82() 및
m.CreateMap453162b02c806123692898c984a1fdf8().ForMember(x => x.ContactInfo, opt => ; opt.MapFrom(o => o.ContactInfo));

rree

【관련 추천】

ASP 무료 동영상 튜토리얼

2. ASP 튜토리얼

3. Li Yanhui ASP 기본 동영상 튜토리얼

위 내용은 OOM에서 AutoMapper 사용 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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