自动映射多对多stackoverflowexception

时间:2011-10-25 20:24:38

标签: c# automapper

我正在为以下映射获得堆栈溢出:

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

我理解为什么会发生这种情况,这显然是一个无限循环。我怎么能让它在automapper中工作?我需要父母了解他们的孩子和他们的孩子,了解他们的父母。我是否必须为不包含ViewModel属性的Children.Parents创建另一个Parents.Children

扩展方法示例,类似于儿童:

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

2 个答案:

答案 0 :(得分:7)

您可以使用MaxDepth设置进​​行递归映射。我以前从未使用它,但它可能会帮助你。你在类型映射上设置它:

Mapper.CreateMap(...).MaxDepth(5)

答案 1 :(得分:3)

AutoMapper会跟踪映射的内容,但仅限于单个Map调用的上下文,而不是对Mapper.Map的多个外部调用。

在任一映射配置中都不需要ForMember部分。如果删除它,AutoMapper将遍历父/子关系并跟踪已映射的内容。