Automapper многие ко многим - PullRequest
4 голосов
/ 26 октября 2011

Я получаю переполнение стека для следующего отображения:

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()));

Я понимаю, почему это происходит, здесь явно бесконечный цикл. Как я должен заставить это работать в autopper? Мне нужно, чтобы родители знали о своих детях, а их дети - о своих родителях. Должен ли я создать еще один ViewModel для Children.Parents, который не содержит свойства Parents.Children?

Пример методов расширения, аналогично для детей:

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

Ответы [ 2 ]

7 голосов
/ 26 октября 2011

Есть настройка MaxDepth, которую вы можете использовать для рекурсивных отображений.Я никогда не использовал его раньше, но это может вам помочь.Вы устанавливаете его на сопоставления типов:

Mapper.CreateMap(...).MaxDepth(5)
3 голосов
/ 26 октября 2011

AutoMapper отслеживает то, что отображается, но только в контексте одного вызова Map, а не нескольких внешних вызовов Mapper.Map.

Вам не понадобится кусок ForMember ни в одной конфигурации сопоставления. Если вы удалите это, AutoMapper будет проходить через отношения родитель / потомок и отслеживать то, что уже было отображено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...