我有一个场景,我想忽略基类中定义的类的一些属性.
我有这样的初始映射
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
如果你决定不想忽略基类中的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)
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |