gpt4 book ai didi

automapper - 使用 Automapper 在子类映射中忽略基类属性的问题

转载 作者:行者123 更新时间:2023-12-04 17:41:15 28 4
gpt4 key购买 nike

我有一个场景,我想忽略基类中定义的类的某些属性。

我有一个这样的初始映射

   Mapper.CreateMap<Node, NodeDto>()
.Include<Place, PlaceDto>()
.Include<Asset, AssetDto>();

然后我更像这样自定义它以忽略基类 NodeDto 中定义的属性之一
 Mapper.CreateMap<Node, NodeDto>()
.ForMember(dest => dest.ChildNodes, opt => opt.Ignore());

但是,当我尝试将 Place 映射到 PlaceDto 或 Asset 映射到 AssetDto 时,ChildNodes 属性不会被忽略。所以我最终做了这样的事情
  Mapper.CreateMap<Node, NodeDto>()
.ForMember(dest => dest.ChildNodes, opt => opt.Ignore());
Mapper.CreateMap<Place, PlaceDto>()
.ForMember(dest => dest.ChildNodes, opt => opt.Ignore());
Mapper.CreateMap<Asset, AssetDto>()
.ForMember(dest => dest.ChildNodes, opt => opt.Ignore());

由于我有很多NodeDto的子类,所以上面的过程比较繁琐,想知道有没有更好的方法?

谢谢
纳比尔

最佳答案

如果您随后决定不仅要忽略基类中的 1 个属性,还要忽略 2 个、3 个甚至更多的属性,则会变得更加麻烦。在这种情况下,它可能对您没有多大帮助,我相信 9 个月后您可能已经找到了解决方案,但是为了让其他遇到这个问题的人受益,扩展方法可以降低一些复杂性。

    public static class MappingExtensions
{
public static IMappingExpression<Node, NodeDto> MapNodeBase<Node, NodeDto>(
this IMappingExpression<Node, NodeDto> mappingExpression)
{
// Add your additional automapper configuration here
return mappingExpression.ForMember(
dest => dest.ChildNodes,
opt => opt.Ignore()
);
}
}

然后你会这样称呼它:
Mapper.CreateMap<Node, NodeDto>()
.MapNodeBase()
.Include<Place, PlaceDto>()
.Include<Asset, AssetDto>();

关于automapper - 使用 Automapper 在子类映射中忽略基类属性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336931/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com