我有点困惑。我找不到PreserveReferencesMaxDepth之间的区别。

假设我们有以下DTO和模型。

public class PersonEntity
{
    public PersonEntity InnerPerson { get; set; }
}

public class PersonModel
{
    public PersonModel InnerPerson { get; set; }
}

如文档中所写:



我的映射:
cfg.CreateMap<PersonModel, PersonEntity>().MaxDepth(1);
cfg.CreateMap<PersonEntity, PersonModel>();

程序:
var personModel = new PersonModel();
personModel.InnerPerson = personModel;
var entity = Mapper.Map<PersonEntity>(personModel);

这就是我期望得到的:

c# - AutoMapper:PreserveReferences和MaxDepth有什么区别?-LMLPHP

那就是我真正得到的:

c# - AutoMapper:PreserveReferences和MaxDepth有什么区别?-LMLPHP

我可以将它们(PreserveReferencesMaxDepth)都用于解析循环引用,但是我看不出有什么区别。什么时候应该在MaxDepth方法中使用不同数量的深度?那么,有人可以提供吗?提前致谢。

最佳答案

MaxDepth在运行时不考虑对象值。在映射树的深度达到配置的值之后,它只是停止映射。
PreserveReferences不能帮助ProjectToMaxDepth可以。如果以某种方式使用Map,您有一个可能会溢出堆栈的映射树,但是对象实例没有重复,那么PreserveReferences将无济于事,而MaxDepth将有所帮助。
MaxDepth是可预测的,它停止在硬编码值上,PreserveReferences仅在复制对象实例时停止。

关于c# - AutoMapper:PreserveReferences和MaxDepth有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48824263/

10-13 04:22