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

2024-03-03

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

我有一个像这样的初始映射

   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>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Automapper 忽略子类映射中的基类属性的问题 的相关文章

随机推荐