AutoMapper MaxDepth()方法

时间:2013-01-14 13:56:50

标签: c# .net automapper

在我的项目中,我与Client -> Projects有一对多的关系。因此,在我的一个视图中,我试图显示属于该客户端的所有项目。所以我有一个代表所有客户项目的IEnumerable<ProjectDetailsViewModel>

问题在于,ProjectDetailsViewModel有一个ClientDetailsViewModel,然后有一个IEnumerable<ProjectDetailsViewModel>等等,从而创建了无限循环的相同实体。

是否适合在.ForMember()上使用MaxDepth()方法?如果是这样,我如何在这种情况下使用它,如果没有,解决方案是什么?

我在Client上尝试过MaxDepth(1),虽然这可以防止StackOverflow异常,但它不会在该客户端的视图模型中保存任何数据。

1 个答案:

答案 0 :(得分:5)

问题在于我明确地使用AutoMapConfig来调用AutoMapper:

.ForMember(x => x.Client, opt => opt.MapFrom(src =>
    AutoMapper.Mapper.Map<ClientDetailsViewModel>(src.Client)))

如果我只是将其定义为:

.ForMember(x => x.Client, opt => opt.MapFrom(src => src.Client))

AutoMapper会在1次递归后知道停止,因为我已经有Client -> ClientDetailsViewModel的地图,所以没有问题。