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