迁移到 AutoMapper 5 - 循环引用

2023-12-07

我有一个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?
  • What is .PreserveReferences() for?

PreserveReferences将使地图表现得像AutoMapper4正如你习惯的那样。它将使AutoMapper跟踪映射的内容并防止其导致溢出。

另一个选项是设置您想要的深度AutoMapper来穿越。通过设定的深度,它将按照指定的次数映射自引用模型。

循环引用将是一个类,例如:

public class Category
{
    public int Id {get;set;}
    public Category Child {get;set;}
    public string Value {get;set;}
}

引用自身的类、属性Child意味着你可以多次嵌套这个对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

迁移到 AutoMapper 5 - 循环引用 的相关文章

随机推荐