나는 이상한 경우가있어서 나는 AutoMapper에 꽤 익숙해 어떤 일이 일어나고 있는지 이해할 수 없다.AutoMapper - "내부"지도를 수행하지 않도록 선택하는 방법은 무엇입니까?
나는 두 클래스
public class Person
{
public List<Friend> Friends {get;set;}
}
public class PersonView : Person
{
public new List<FriendView> Friends {get;set;}
}
및지도를
Mapper.CreateMap<Person, PersonView>().ForMember(d => d.Friends,
o => o.ResolveUsing<FriendViewResolver>().FromMember(s => s.Friends));
하지만, 나 또한 자신의 매핑이이 맵이 : 이제, 내부 FriendViewResolver을
Mapper.CreateMap<Friend, FriendView>().ForMember(/* a lot of stuff */);
을 - 친구 한 명당 Mapper.Map<Friend, FriendView>()
에게 전화 할께. 그러나 그것이 실행 된 후 어떤 이유로 인해 일부 속성이 손실되고 코드를 단계적으로 실행하면 AutoMapper가 목록에서 두 번째 패스를 수행하는 것으로 보입니다.
전체 컬렉션이 Friends
인 재귀적인 작업을 수행하기 때문에 FriendViewResolver
을 목록에서 실행하고 싶지만 멤버에 대한 확인자 규칙이있는 경우 AM이 두 번째 패스를 수행하는 이유를 이해할 수 없습니다.
나는 그것이 정말로 의미가 있기를 바랍니다.
편집 : Mapper.Map<Person, PersonView>();
을 실행할 때 문제가 발생하여 FriendViewResolver
이 실행되고 올바른 결과를 얻었지만 다음 단계에서 디버거가 다시 실행되고 이미 매핑 된 개체가 망가집니다.
아니요, 왜 'FriendViewResolver'가 필요한지 말씀 드렸습니다. 전체 목록에서 실행해야하는데 1 대 1 매핑을 할 수 없습니다 – Madd0g
그럴 경우''매핑이 필요합니까? 선언 했어? 그것을 제거했다면 (임시적으로, 테스트를 위해)''매핑이 예상대로 작동합니까? –
hawkke
필자는 매핑을 생성 할 필요가있다. 나는 이것을 'FriendViewResolver'에서 수동으로 호출하고있다. 그것 없이는 'FriendViewResolver'가 결과를 유지할 수 없습니다 (입력 유형이 다르기 때문에). 그러면 다른 문제가 있습니다. – Madd0g