我有点困惑。我找不到PreserveReferences
和MaxDepth
之间的区别。
假设我们有以下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);
这就是我期望得到的:
那就是我真正得到的:
我可以将它们(
PreserveReferences
和MaxDepth
)都用于解析循环引用,但是我看不出有什么区别。什么时候应该在MaxDepth
方法中使用不同数量的深度?那么,有人可以提供吗?提前致谢。 最佳答案
MaxDepth
在运行时不考虑对象值。在映射树的深度达到配置的值之后,它只是停止映射。PreserveReferences
不能帮助ProjectTo
,MaxDepth
可以。如果以某种方式使用Map
,您有一个可能会溢出堆栈的映射树,但是对象实例没有重复,那么PreserveReferences
将无济于事,而MaxDepth
将有所帮助。MaxDepth
是可预测的,它停止在硬编码值上,PreserveReferences
仅在复制对象实例时停止。
关于c# - AutoMapper:PreserveReferences和MaxDepth有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48824263/