2011-10-25 2 views
4

나는 다음과 같은 매핑 스택 오버 플로우를 받고 있어요 :이 여기에 분명히 무한 루프가 발생하는 이유를 이해Automapper 대다있는 StackOverflowException

Mapper.CreateMap<Parent, ParentViewModel>() 
       .ForMember(x => x.Children, o => o.MapFrom(x => x.Children.ConvertToChildrenViewModel())); 

Mapper.CreateMap<Children, ChildrenViewModel>() 
       .ForMember(x => x.Parents, o => o.MapFrom(x => x.Parents.ConvertToParentViewModel())); 

. 자동 어카운트에서이 기능을 사용하려면 어떻게해야합니까? 부모님께서는 자녀들과 자녀들이 부모님에 대해 아는 것이 필요합니다. Parents.Children 속성이 포함되어 있지 않은 Children.Parents에 대해 ViewModel을 새로 만들어야합니까? 유사하게 어린이를위한

확장 방법 예 :

public static IList<ParentViewModel> ConvertToParentViewModel(this IEnumerable<Parent> parents) 
     { 
      return Mapper.Map<IList<ParentViewModel>>(parents); 
     } 
+0

'ConvertToChildrenViewModel'과'ConvertToParentViewModel'은 실제로 어떤 메소드를 사용합니까? 코드 – hazzik

답변

3

AutoMapper 매핑 있는지를 추적하지만, 단 하나의지도를 호출, Mapper.Map에없는 여러 외부 호출의 맥락에서 않습니다.

어느 매핑 구성에서든 ForMember 조각이 필요 없습니다. 이를 제거하면 AutoMapper는 부모/자식 관계를 트래버스하고 이미 매핑 된 항목을 추적합니다.

+0

다시 지미에게 도움을 청합니다! – spaceagestereo

7

당신이 재귀 매핑에 사용할 수있는 설정 MaxDepth있다. 전에 사용 해 본 적이 없지만 도움이 될 것입니다. 당신은, 형태 맵에 설정 :

Mapper.CreateMap(...).MaxDepth(5) 
+0

을 보여주십시오. 다른 제안 사항이없는 것 같습니까? – spaceagestereo

+0

ForMember가 필요없는 것 같습니다. 우리가 컬렉션을 위해 왜 거기에 넣었는지 확실하지 않지만 ForMember 없이는 이제 작동합니다. – spaceagestereo