当前位置: 首页 > 编程语言 > C#

如何使用AutoMapper避免循环引用?分享

时间:2023-04-10 11:21:34 C#

AutoMapper如何避免循环引用?我有以下模型(和相应的DTO):publicclassLink{publicintId{get;设置;}publicintFirstLinkId{get;设置;}publicintSecondLinkId{get;设置;}公共虚拟链接FirstLink{get;设置;}公共虚拟链接SecondLInk{get;设置;}}公共类OtherObject{publicintId{get;设置;}publicintLinkId{get;设置;}公共字符串名称{get;set;}publicvirtualLinkLink{get;set;}}在我的场景中,我可以有一个Link对象,其中FirstLink和/或SecondLink可以为空、对其他对象的引用或对同一对象的引用。现在我想使用EF从数据库加载OtherObject实体。我加载实体本身和与之关联的Link对象。这完全由EF完成。在这种特殊情况下,FirstLink和SecondLink都与Link相同,因此当从模型自动化到dto时,它只是保持映射到遗忘。我的映射是:Mapper.CreateMap().Bidirectional().ForMember(model=>model.LinkId,option=>option.Ignore());其中Bidirectional()是这个扩展:publicstaticIMappingExpressionBidirectional(thisIMappingExpressionexpression){returnMapper.CreateMap();在这种情况下,有没有办法告诉Automapper不要在树的下方进行映射?我处理这个问题的方法是为孩子创建单独的DTO对象:publicclassEmployee{publicintId{get;设置;}公共字符串名称{得到;放;}public员工主管{get;放;}}publicclassEmployeeDto{publicintId{get;设置;}公共字符串名称{得到;放;}publicSupervisorDtoSupervisor{get;放;}publicclassSupervisorDto{publicintId{get;设置;}公共字符串名称{得到;放;}}Mapper.CreateMap();映射器.CreateMap();不要使您的DTO递归/自引用。在你的结构中明确你想要它有多深。EF不能做递归连接,你只能做一个级别,所以不要让你的DTO因无限深的关系而疯狂。清楚。以上就是C#学习教程:如何使用AutoMapper避免循环引用?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: