이 기사에서는 주로 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에는 List
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.CreateMap
m.CreateMap
【관련 추천】
2. ASP 튜토리얼
위 내용은 OOM에서 AutoMapper 사용 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!