>  기사  >  백엔드 개발  >  OOM 프레임워크 AutoMapper의 사용 예를 마스터해 보세요.

OOM 프레임워크 AutoMapper의 사용 예를 마스터해 보세요.

零下一度
零下一度원래의
2017-07-03 17:19:101626검색

이 글은 주로 OOMframeworkAutoMapper 관련 지식을 소개합니다. 이 글의 다섯 가지 예는 일반적인 기본 문제를 해결하는 데 도움이 될 수 있습니다. 일정한 참조값이 있으니 아래 에디터로 살펴보겠습니다

앞에 작성

OOM 이름에서 알 수 있듯이 Object-Object-Mapping 엔터티도 서로 변환되는 AutoMapper입니다. 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; }
 }

단일 엔터티 변환

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


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 메서드를 선택했습니다. 그 의미는 AutoMapper에 도시를 알아야 한다는 것입니다. 대상 엔터티입니다. Source는 소스 엔터티의 City2 속성 값으로 지정됩니다.


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);

변환 설정

컬렉션 간 변환 시 대상 목록과 소스 Listobject 간의 일치를 구성할 필요가 없고 일반 개체의 매핑 일치 관계만 구성하면 됩니다. .


  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에는 Listbc26e2d35896972142bded266172216c가 포함되어 있고 ViewModel1에는 List2da93825b6c46466bfb16944e1d08026 . 이때 이 속성을 무시하도록 선택할 수 있습니다


 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));


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<TContactInfo, VM_ContactInfo>();//注意 内部不同类型实体转换时必要的
  m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));//注意 制定MapFrom是必要的
  });
  VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);

마지막에 작성

엔터티 변환에서 AutoMapper의 필요성과 실용성을 확실히 확인하셨습니다.

위 내용은 OOM 프레임워크 AutoMapper의 사용 예를 마스터해 보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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