你的位置: 首页 / C#开发 / 正文

C#/.NET应用程序编程开发中使用AutoMapper时如何忽略某个或某些属性的映射?

39 收藏 读完约需 1 分钟 发布于: 2019-07-08 15:08

问题描述

C#/.NET应用程序编程开发中,我们可以使用AutoMapper快速解决不同实体之间的映射问题,但有时候两个实体间的映射时需要忽略部分属性的映射,这时应该如何处理呢?

方案一

AutoMapper提供了忽略属性映射的方法,在AutoMapper配置时调用ForMember()方法的Ignore(),如下:

CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());

方案二

为了方便,我们还可以创建一个泛型的扩展方法,如下:

public static IMappingExpression<TSource, TDestination> Ignore<TSource, TDestination>(
    this IMappingExpression<TSource, TDestination> map,
    Expression<Func<TDestination, object>> selector)
{
    map.ForMember(selector, config => config.Ignore());
    return map;
}

调用示例:

Mapper.CreateMap<JsonRecord, DatabaseRecord>()
        .Ignore(record => record.Field)
        .Ignore(record => record.AnotherField)
        .Ignore(record => record.Etc);

方案三

如果你需要忽略两个实体间不一致的属性,则可以使用如下的扩展方法:

public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
    var sourceType = typeof(TSource);
    var destinationType = typeof(TDestination);
    var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.Equals(sourceType)
        && x.DestinationType.Equals(destinationType));
    foreach (var property in existingMaps.GetUnmappedPropertyNames())
    {
        expression.ForMember(property, opt => opt.Ignore());
    }
    return expression;
}

调用示例:

Mapper.CreateMap<SourceType, DestinationType>().IgnoreAllNonExisting();

方案四

使用ForSourceMember()方法,如下:

conf.CreateMap<SourceType, DestinationType>()
   .ForSourceMember(x => x.SourceProperty, y => y.Ignore());

郑重申明:本文未经许可,禁止任何形式转载

阅读了该文章的人还浏览了...

本文永久链接码友网 » C#/.NET应用程序编程开发中使用AutoMapper时如何忽略某个或某些属性的映射?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册