首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在AutoMapper中使用全局忽略?

如何在AutoMapper中使用全局忽略?
EN

Stack Overflow用户
提问于 2011-12-29 03:41:41
回答 5查看 3.5K关注 0票数 2

下面是现在的样子。DestinationA和DestinationB是从某些DestinationBase类派生出来的。我需要忽略所有这些派生类的一些公共属性。全局是否可以应用这些忽略选项,而不必对所有派生目标类重复使用?

代码语言:javascript
运行
复制
Mapper.CreateMap<SourceA, DestinationA>()
      .ForMember(d => d.PropA, opt => opt.Ignore())
      .ForMember(d => d.PropB, opt => opt.Ignore())
      .ForMember(d => d.PropC, opt => opt.Ignore());

Mapper.CreateMap<SourceB, DestinationB>()
      .ForMember(d => d.PropA, opt => opt.Ignore())
      .ForMember(d => d.PropB, opt => opt.Ignore())
      .ForMember(d => d.PropC, opt => opt.Ignore());

我期待着这样的事情:

代码语言:javascript
运行
复制
Mapper.CreateMap<DestinationBase>().ForAllSource()
      .ForMember(d => d.PropA, opt => opt.Ignore())
      .ForMember(d => d.PropB, opt => opt.Ignore())
      .ForMember(d => d.PropC, opt => opt.Ignore());
EN

回答 5

Stack Overflow用户

发布于 2017-10-08 22:22:58

您可以忽略所有未映射的全局属性。虽然这与automapper的主要优点相矛盾,但只允许进行显式映射:这是Automapper 6的:

代码语言:javascript
运行
复制
    var mapperConfiguration = new MapperConfiguration(cfg =>
    {
        cfg.AddProfile(new MyProfile());
        // ignore all unmapped properties globally
        cfg.ForAllMaps((map, exp) => exp.ForAllOtherMembers(opt => opt.Ignore()));
    });
票数 3
EN

Stack Overflow用户

发布于 2012-11-27 02:33:37

现在有了一种方法FindTypeMapFor,它使这个扩展方法更小(并且更高效?):

代码语言:javascript
运行
复制
public static IMappingExpression<TSource, TDestination> IgnoreAllNonMapped<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
    {
        foreach (var property in Mapper.FindTypeMapFor<TSource, TDestination>().GetUnmappedPropertyNames())
        {
            expression.ForMember(property, opt => opt.Ignore());
        }
        return expression;
    }
票数 2
EN

Stack Overflow用户

发布于 2014-04-17 21:19:30

我也有同样的问题,在寻求帮助的时候遇到了这个老问题。最后我想出了下面的解决方案。也许这对其他人有帮助。

我有几个从基类派生出来的类。我希望从基类派生的任何类的所有映射中排除该基类的一个属性。在创建映射(并且没有指定任何忽略选项)之后,我执行以下操作:

代码语言:javascript
运行
复制
foreach(var map in Mapper.GetAllTypeMaps())
{
    if (typeof(MyBaseClass).IsAssignableFrom(map.DestinationType))
    {
        var propInfo = map.DestinationType.GetProperty("PropertyToIgnore");
        if (propInfo != null) {
            map.FindOrCreatePropertyMapFor(new AutoMapper.Impl.PropertyAccessor(propInfo)).Ignore();
        }
    }
}

这是一个有点蛮力,因为我必须循环所有类型的地图,但它完成了工作。

编辑:将缺失的{添加到if语句中

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8663771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档