C# AutoMapper 6.2.2映射具有循环引用的对象时抛出StackOverflowException(尽管相应的属性为NULL)
我们使用EntityFramework 6.2.0和Automapper 6.2.2在实体和DTO之间进行映射。 不幸的是,对于其中一些映射,System.StackOverflowException会反复出现。 经过广泛的研究,我们已经尝试了几种方法来解决这个问题:C# AutoMapper 6.2.2映射具有循环引用的对象时抛出StackOverflowException(尽管相应的属性为NULL),c#,entity-framework-6,stack-overflow,automapper-6,C#,Entity Framework 6,Stack Overflow,Automapper 6,我们使用EntityFramework 6.2.0和Automapper 6.2.2在实体和DTO之间进行映射。 不幸的是,对于其中一些映射,System.StackOverflowException会反复出现。 经过广泛的研究,我们已经尝试了几种方法来解决这个问题: 设置最大深度(全局) 设置保留引用(全局) 启用/禁用CreateMissingTypeMaps(全局) 试图理解执行计划 到目前为止,还没有解决这个问题。各种文章描述了DTO中应避免循环引用,不幸的是,我们的情况并非如此 循
- 设置最大深度(全局)
- 设置保留引用(全局)
- 启用/禁用CreateMissingTypeMaps(全局)
- 试图理解执行计划
public class OneDTO
{
public Guid Id { get; set; }
public List<OtherDTO> Others { get; set; }
}
public class OtherDTO
{
public Guid Id { get; set; }
public OneDTO One { get; set; }
}
public class Profiles : Profiles
{
public Profiles()
{
CreateMap<One, OneDTO>().ReverseMap();
CreateMap<Other, OtherDTO>().ReverseMap();
}
}
公共类OneDTO
{
公共Guid Id{get;set;}
公共列表其他{get;set;}
}
公共类OtherDTO
{
公共Guid Id{get;set;}
public OneDTO One{get;set;}
}
公共类配置文件:配置文件
{
公众简介()
{
CreateMap().ReverseMap();
CreateMap().ReverseMap();
}
}
但是,如果根本没有设置这些假定的循环引用属性,即为空,也会出现问题。但是,如果从类中完全删除这些属性,则不再发生错误
除了循环引用之外,还有其他可能的原因吗?此错误是否也会由于配置错误而发生?在大多数情况下,我们使用这样的映射:
CreateMap<One, OneDTO>().ReverseMap();
CreateMap().ReverseMap();
AssertConfigurationsValid方法充满了关于“未映射成员已找到”的警告
我们问自己的主要问题是,我们是否忽略了配置、配置错误,或者是否真的需要从DTO中删除所有循环引用
如果相关,请注意:我们使用SimpleInjector作为DI容器,用于将MappingConfiguration捆绑在中心位置,并将其注入到
存在对IMapper依赖关系的必需位置。创建一个我们可以执行并看到失败的选项。