在将Automapper从版本4.x.x升级到5之后获取System.StackOverflowException 0
问题描述:
我们在从版本3到4.2.1的多个项目中使用Automapper多年。我认为,我们没有任何问题将我们的实体映射到DTO,反之亦然。突然升级到版本5.0.2后。现在,所有具有循环引用的对象都会导致0123.方法抛出System.StackOverflowException,其他具有基本属性的对象被映射得很好。我们回到4.2.1版本,它工作正常。在将Automapper从版本4.x.x升级到5之后获取System.StackOverflowException 0
应该有一些配置使映射器能够处理循环引用,或者我们只是以错误的方式使用它(不推荐使用)。
答
经过一番挖掘,我发现当使用CreateMap
方法创建地图时,我们只需要调用另一个名为PreserveReferences
的方法,该方法保留了循环引用中的引用,并且完全符合我们的要求。我们的代码如下所示:
_config = new AutoMapper.MapperConfiguration(cfg =>
{
foreach(var mapping in _mappings)
{
cfg.CreateMap(mapping.Source, mapping.Destination).PreserveReferences();
}
});
_mapper = _config.CreateMapper();
这个小小的改变对我们来说是一场灾难!幸运的是我们找到了解决方案。有关于这个问题的讨论here。