C#学习教程:如何使用AutoMapper避免循环引用?分享


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

我有以下模型(和相应的DTO):

public class Link { public int Id {get; set;} public int FirstLinkId {get; set;} public int SecondLinkId {get; set;} public virtual Link FirstLink {get; set;} public virtual Link SecondLInk {get; set;} } public class OtherObject { public int Id {get; set;} public int LinkId {get; set;} public string Name {get; set;} public virtual Link Link {get; set;} } 

在我的场景中,我可以有一个Link对象,其中FirstLink和/或SecondLink可以为null,对其他对象的引用或对同一对象的引用。

现在我想使用EF从db加载OtherObject实体。 我加载实体本身以及与之关联的Link对象。 这完全由EF完成。

在这种特殊情况下, FirstLinkSecondLink都与Link相同,因此,当从模型到dto自动化时,它只会继续映射到遗忘。

我的映射是:

 Mapper.CreateMap().Bidirectional() .ForMember(model => model.LinkId, option => option.Ignore()); 

其中Bidirectional()是此扩展名:

 public static IMappingExpression Bidirectional(this IMappingExpression expression) { return Mapper.CreateMap(); } 

在这种情况下,有没有办法告诉Automapper不要在树下进一步映射?

我处理这个的方法是为孩子们创建单独的DTO对象:

 public class Employee { public int Id {get; set;} public string Name { get; set; } public Employee Supervisor {get; set; } } public class EmployeeDto { public int Id {get; set;} public string Name { get; set; } public SupervisorDto Supervisor { get; set; } public class SupervisorDto { public int Id {get; set;} public string Name { get; set; } } } Mapper.CreateMap(); Mapper.CreateMap(); 

不要让你的DTO递归/自我指涉。 在你的结构中明确你想要它有多深。

EF不能做递归连接,你只做一个级别,所以不要让你的DTO与无限深层的关系疯狂。 要明确。

上述就是C#学习教程:如何使用AutoMapper避免循环引用?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1301118.html

(0)
上一篇 2023年1月8日 上午11:27
下一篇 2023年1月8日 下午1:16

精彩推荐