2016-07-29 49 views
1

我們在從版本3到4.2.1的多個項目中使用Automapper多年。我認爲,我們沒有任何問題將我們的實體映射到DTO,反之亦然。突然升級到版本5.0.2後。現在,所有具有循環引用的對象都會導致0123.方法拋出System.StackOverflowException,其他具有基本屬性的對象被映射得很好。我們回到4.2.1版本,它工作正常。在將Automapper從版本4.x.x升級到5之後獲取System.StackOverflowException 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