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

nab*_*rid 5 automapper

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

我有这样的初始映射

   Mapper.CreateMap<Node, NodeDto>()
                .Include<Place, PlaceDto>()
                .Include<Asset, AssetDto>();
Run Code Online (Sandbox Code Playgroud)

然后我更像这样定制它来忽略基类NodeDto中定义的一个属性

 Mapper.CreateMap<Node, NodeDto>()
                .ForMember(dest => dest.ChildNodes, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试映射Place Place to PlaceDto或Asset to 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());
Run Code Online (Sandbox Code Playgroud)

由于我有很多NodeDto的子类,上面的过程很麻烦,我想知道是否有更好的方法?

谢谢Nabeel

Mat*_*t B 5

如果你决定不想忽略基类中的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()
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后你会这样称呼:

Mapper.CreateMap<Node, NodeDto>()
            .MapNodeBase()
            .Include<Place, PlaceDto>()
            .Include<Asset, AssetDto>();
Run Code Online (Sandbox Code Playgroud)


Omu*_*Omu 2

抱歉,不,没有其他方法,这就是自动映射器的工作原理