我知道这可能会被标记为重复问题,是的,我确实查看了可能已经回答了我的问题但仍然找不到答案的问题。
正如大多数其他问题所涉及的那样,我的问题与相互引用的模型有关。我很清楚我可以遵循的其他方法,例如重构我的代码为子级创建单独的 DTO 对象。问题是,模型非常多,重构一切都会非常麻烦。
我阅读了 Automapper v5.0 升级指南,其中说明了以下内容:
我试过了 - 例如ClientModel
:
var clientModelMap = CreateMap<Client, ClientModel>()
.ForMember(dest => dest.Id, source => source.MapFrom(x => x.ClientId))
.ForMember(dest => dest.InvoicePayments, source => source.Ignore());
clientModelMap.MaxDepth(1);
clientModelMap.PreserveReferences();
以及在Project
模型中:
var projectModelMap = CreateMap<Project, ProjectModel>()
.ForMember(dest => dest.Client, source => source.Ignore())
.ForMember(dest => dest.Id, source => source.MapFrom(x => x.ProjectId))
.ForMember(dest => dest.ClientName, source => source.MapFrom(x => x.Client.ClientName))
.ForMember(dest => dest.ClientTariff, source => source.MapFrom(x => x.Client.Tariff))
;
projectModelMap.MaxDepth(1);
projectModelMap.PreserveReferences();
结构如下:
- 客户
- 项目(每个客户有很多项目)
- 资源(每个项目都有一个项目经理)
- 项目(与他/她正在从事的一个或多个项目相关联)
- 客户(与客户相关联/充当经理)
- 资源(每个项目都有一个项目经理)
- 项目(每个客户有很多项目)
但这没有任何效果,我仍然收到一个StackOverflowException
. 我错过了什么或做错了什么?
如果这不是要走的路,我愿意接受建议。
非常感谢!