将Automapper从版本4.x.x升级到5后获取System.StackOverflowException

时间:2016-07-29 18:56:30

标签: c# automapper

我们在多个项目中使用Automapper多年来从版本3到4.2.1我认为我们将实体映射到DTO没有问题,反之亦然。升级到5.0.2版后突然。现在所有具有循环引用的对象都导致Map方法抛出System.StackOverflowException,其他具有原始属性的对象被映射得很好。我们回滚到4.2.1版本,它工作正常。

应该有一些配置使映射器能够处理循环引用,或者我们只是以错误的方式使用它(不推荐的方式)。

1 个答案:

答案 0 :(得分:1)

经过一番挖掘后,我发现在使用CreateMap方法创建地图时,我们只需要调用另一个名为PreserveReferences的方法,该方法会保留循环引用中的引用,并完全符合我们的要求。我们的代码如下所示:

_config = new AutoMapper.MapperConfiguration(cfg => 
{
    foreach(var mapping in _mappings) 
    {
        cfg.CreateMap(mapping.Source, mapping.Destination).PreserveReferences();
    }
});

_mapper = _config.CreateMapper();

这个微小的变化即将给我们带来灾难!幸运的是我们找到了解决方案。有关此问题的讨论here