在将Automapper从版本4.x.x升级到5之后获取System.*Exception 0

问题描述:

我们在从版本3到4.2.1的多个项目中使用Automapper多年。我认为,我们没有任何问题将我们的实体映射到DTO,反之亦然。突然升级到版本5.0.2后。现在,所有具有循环引用的对象都会导致0123.方法抛出System.*Exception,其他具有基本属性的对象被映射得很好。我们回到4.2.1版本,它工作正常。在将Automapper从版本4.x.x升级到5之后获取System.*Exception 0

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

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

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

_mapper = _config.CreateMapper(); 

这个小小的改变对我们来说是一场灾难!幸运的是我们找到了解决方案。有关于这个问题的讨论here