gsh*_*arp 2 .net c# automapper automapper-5
System.StackOverflowException我在尝试在 AutoMapper 5 中映射以前在 AutoMapper 4 中使用的某些内容时遇到了问题。
经过一番谷歌搜索后,我发现它是由Circularreferences引起的。
AutoMapper 文档说:
以前,AutoMapper 可以通过跟踪映射的内容来处理循环引用,并在每个映射上检查源/目标对象的本地哈希表以查看该项目是否已映射。事实证明,这种跟踪非常昂贵,您需要选择使用 PreserveReferences 才能使圆形地图发挥作用。或者,您可以配置 MaxDepth:
Run Code Online (Sandbox Code Playgroud)// Self-referential mapping cfg.CreateMap<Category, CategoryDto>().MaxDepth(3); // Circular references between users and groups cfg.CreateMap<User, UserDto>().PreserveReferences();
所以我添加.MaxDepth(3)到我的代码中,它现在又可以工作了。
但是我不明白真正的问题是什么以及我通过添加该行做了什么:)
我的问题:
.MaxDepth()?为什么示例中使用 3?.PreserveReferences()为了什么?PreserveReferences将使地图表现得像AutoMapper4您习惯的那样。它将AutoMapper跟踪映射的内容并防止其导致溢出。
另一个选项是设置您想要遍历的深度AutoMapper。通过设定的深度,它将按照指定的次数映射自引用模型。
循环引用将是一个类,例如:
public class Category
{
public int Id {get;set;}
public Category Child {get;set;}
public string Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
类引用自身,属性Child意味着您可以多次嵌套该对象。
| 归档时间: |
|
| 查看次数: |
3518 次 |
| 最近记录: |