我System.StackOverflowException
在尝试在 AutoMapper 5 中映射以前与 AutoMapper 4 一起使用的东西时遇到了问题。
在谷歌搜索了一下后,我发现它是由循环引用引起的。
AutoMapper 文档说:
以前,AutoMapper 可以通过跟踪映射的内容来处理循环引用,并且在每个映射上,检查源/目标对象的本地哈希表以查看项目是否已被映射。事实证明,这种跟踪非常昂贵,您需要选择使用 PreserveReferences 才能使圆形地图工作。或者,您可以配置 MaxDepth:
// Self-referential mapping cfg.CreateMap<Category, CategoryDto>().MaxDepth(3); // Circular references between users and groups cfg.CreateMap<User, UserDto>().PreserveReferences();
所以我添加.MaxDepth(3)
到我的代码中,它现在又可以工作了。
但是我不明白真正的问题是什么以及我通过添加该行做了什么:)
我的问题:
- 关于 Category/CategoryDto 的“循环引用”是什么意思?
- 究竟是做什么的
.MaxDepth()
?为什么在示例中使用 3? - 是
.PreserveReferences()
为了什么?