Automapper v5.1.1 - 循环引用

时间:2016-09-01 09:01:07

标签: c# automapper-5

我知道这可能会被标记为重复的问题,是的,我确实已经审核了可能已经回答了我的问题的问题,但仍然无法找到答案。

正如大多数其他问题所涉及的那样,我的问题与相互引用的模型有关。我很清楚我可以遵循的其他方法,比如重构我的代码以为孩子们创建单独的DTO对象。问题是,有相当多的模型和重构一切都会非常麻烦。

我阅读了Automapper v5.0 Upgrade Guide,其中说明了以下内容:

enter image description here

我已尝试过 - 例如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。我错过了什么或做错了什么?

如果不是这样的话,我愿意接受建议。

非常感谢!

1 个答案:

答案 0 :(得分:0)

(代表OP发布)

它按预期运行 - 我只需更新模型层次结构的其余部分的映射配置文件。