이 글은 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!