Automapper를 사용하여 목록 매핑
수업이 있습니다.
public class Person{ /* Props here */ }
public class PersonViewModel { /* Props here */ }
그런 다음 목록 :
List<Person> people = new List<Person>();
List<PersonViewModel> peopleVM = Mapper
.MapList<Person, PersonViewModel>(people); //Problem here.
이를 수행하는 올바른 방법은 무엇입니까?
Mapper.CreateMap<Person, PersonViewModel>();
peopleVM = Mapper.Map<List<Person>, List<PersonViewModel>>(people);
Mapper.AssertConfigurationIsValid();
에서가 시작하기 :
AutoMapper는 어떻게 사용합니까?
먼저 작업 할 소스 및 대상 유형이 모두 필요합니다. 대상 유형의 디자인은 그것이 존재하는 레이어의 영향을받을 수 있지만 AutoMapper는 멤버 이름이 소스 유형의 멤버와 일치하는 한 가장 잘 작동합니다. "FirstName"이라는 소스 멤버가있는 경우 이름이 "FirstName"인 대상 멤버에 자동으로 매핑됩니다. AutoMapper는 또한 Flattening을 지원하여 도중에 발생할 수있는 모든 성가신 null 참조 예외를 제거 할 수 있습니다.
유형과 AutoMapper에 대한 참조가 있으면 두 유형에 대한 맵을 만들 수 있습니다.
Mapper.CreateMap<Order, OrderDto>();
왼쪽의 유형은 소스 유형이고 오른쪽의 유형은 대상 유형입니다. 매핑을 수행하려면 Map 메서드를 사용합니다.
OrderDto dto = Mapper.Map<Order, OrderDto>(order);
또 다른 해결책
List<Person> people = new List<Person>();
List<PersonViewModel> peopelVM;
peopelVM = people.Select(Mapper.Map<Person, PersonViewModel>);
그리고 Automapper 구성에서
Mapper.CreateMap<Person, PersonViewModel>();
여기에서 IQueryable 목록 (예 : EF 또는 NH)을 사용하는 경우 AutoMapper.IQueryableExtensions 메서드 인 Project () 및 To ()를 사용할 수 있습니다.
AutoMapper를 사용한 것은 이번이 처음이지만 모델에 대한 맵을 생성하여 성공하고 있습니다.
Mapper.CreateMap<Person, PersonViewModel>();
Mapper.AssertConfigurationIsValid();
그런 다음 IQueryableExtension 메서드 Project () 및 To ()를 사용합니다.
using AutoMapper.QueryableExtensions;
...
IQueryable<Person> people = new List<Person>().AsQueryable(); //actually from ORM
IQueryable<PersonViewModel> peopleVM = people.Project().To<PersonViewModel>();
코어 1.1에서는이 확장이 작동 할 수 있습니다.
public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source)
{
return source.Select(x => mapper.Map<TDestination>(x)).ToList();
}
개별 항목에 대한 기존 매핑을 사용하여 다음과 같은 작업을 수행하는 확장 메서드를 만들 수 있습니다.
public static class AutoMapperExtensions
{
public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source)
{
return mapper.Map<List<TDestination>>(source);
}
}
용법:
List<PersonViewModel> peopleVM = _mapper.MapList<PersonViewModel>(people);
public IActionResault Index(List<User> users)
{
List<VM_User> vM_users=new List<VM_User>();
vM_users=mapper.Map(users,vM_users);
return view(vM_users);
}
참고 URL : https://stackoverflow.com/questions/5589471/mapping-lists-using-automapper
'Development Tip' 카테고리의 다른 글
스크롤하는 동안 Jquery .on ( 'scroll')이 이벤트를 발생시키지 않습니다. (0) | 2020.11.21 |
---|---|
Google Apps 계정을 통해 C #을 통해 이메일 보내기 (0) | 2020.11.21 |
쿠키가 활성화되어 있는지 확인 (0) | 2020.11.21 |
수학 표현을 단순화하기위한 전략 (0) | 2020.11.21 |
조각의 onSaveInstanceState ()는 호출되지 않습니다. (0) | 2020.11.21 |