使用 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 忽略子类映射中的基类属性的问题 的相关文章

  • 如何在 ASP.NET MVC 控制器中使用 Automapper 配置

    我正在使用 AutoMapper 将模型转换为视图模型 我已经完成所有设置 测试和工作 作为参考 我的配置方法如下所示 public static MapperConfiguration Configure MapperConfigurat
  • 自动映射器的条件被忽略

    Issue似乎条件被忽略了 这是我的场景 源类 public class Source public IEnumerable
  • 自动映射器无法映射到 IEnumerable

    我有两个这样的课程 public class SentEmailAttachment ISentEmailAttachment public SentEmailAttachment public string FileName get se
  • 自动映射器有什么用?

    What s 自动映射器 http www codeplex com AutoMapper for 它将如何帮助我处理域和控制器层 asp net mvc 也许一个例子会有所帮助 假设您有一个很好标准化的数据库模式 如下所示 Orders
  • 使用 AutoMapper 映射分组集合

    我有以下代码不起作用 var groupedZones this zoneDataManager GetZonesGroupedByCountry IEnumerable
  • 映射日期时间未转换为正确的格式

    我有这个映射器 在映射逻辑中我将检查属性是否具有属性 CustomDateConverAttribute 如果有 我将调用一个函数将字符串转换为正确的格式 CreateMap
  • 注入自动映射器

    我一直致力于将 AutoMapper 注入控制器 我喜欢 Code Camp Server 的实现 它围绕 AutoMapper 的 IMappingEngine 创建一个包装器 依赖注入是使用 StructureMap 完成的 但我需要在
  • 属性名称不同时如何指定映射规则

    我是 Automapper 框架的新手 我有一个域类和一个 DTO 类 如下所示 public class Employee public long Id get set public string Name get set public
  • AutoMapper:将子集合 1 映射到子集合 2 时丢失未映射的属性值

    使用 AutoMapper 映射嵌套集合时 我希望任何未映射的属性都保留其原始值 相反 它们被设置为 null Example 我有这四门课 注意Test2Child有Name财产 同时Test1Child才不是 public class
  • 自动映射器表达式必须解析为顶级成员

    我正在使用自动映射器来映射源对象和目标对象 当我映射它们时 我收到以下错误 表达式必须解析为顶级成员 参数名称 lambda表达式 我无法解决这个问题 我的源对象和目标对象是 public partial class Source priv
  • Automapper、MapFrom 和 EF 动态代理

    我一直在尝试将域对象映射到报表视图模型 在测试中一切都很顺利 我伪造了实体框架代码并使用构建器返回完全填充的 pocco 对象 现在我实际上正在访问数据库并返回数据 我看到一些奇怪的动态代理类型错误 这是我的代码示例 public clas
  • 使用 Autofac 注入接口的特定实例

    我有一个控制器 它接收接口的特定实例 界面看起来像这样 public interface IMyInterface implementation goes here 然后我有一些类实现这个接口 如下所示 public class MyCla
  • 需要加速automapper...完成113个对象需要32秒

    您好 我在自动映射器方面遇到了一些主要问题 而且速度很慢 我不知道如何加快速度 我正在使用 nhibernate Fluent nhibernate 和 asp net mvc 3 0 Serializable public class T
  • AutoMapper 枚举到字节并实现 IMapperConfigurator

    枚举定义是 public enum RowStatusEnum Modified 1 Removed 2 Added 3 public class RowStatusEnumConvertor IMapperConfigurator pub
  • 无法使用 AutoMapper 4.2 和 Autofac 解析 AutoMapper.IMapper

    我已经尝试了各种排列 但我当前的配置 因为它与 AutoMapper 相关 如下所示 builder RegisterAssemblyTypes AssignableTo typeof Profile As
  • Automapper Nuget 包失败

    我尝试安装http automapper org http automapper org 但这导致了错误 Install Package AutoMapper already has a dependency defined for Mic
  • 从外部将值传递给 AutoMapper 类型转换器

    我有一个多语言数据库 它根据键和枚举返回值Language 当我将数据库对象转换为模型时 我希望模型包含基于键和当前语言的翻译值 密钥来自 DB 对象 但我如何将当前语言传递给Mapper Map 功能 目前 我正在使用 ThreadSta
  • 使用 AutoMapper 展开 DTO

    我一直在尝试使用 AutoMapper 来节省从 DTO 到域对象的时间 但是我在配置地图以使其正常工作时遇到了麻烦 并且我开始怀疑 AutoMapper 是否可能是错误的工具工作 考虑这个域对象的示例 一个实体和一个值 public cl
  • 基于约定的对象图同步

    我正在规划我的第一个使用 DTO 的架构 我现在正在探索如何将修改后的客户端域对象映射回最初从数据服务检索的 DTO 为了使用 WCF 数据服务客户端库的更改跟踪功能 我必须映射回原始对象图 而不是实例化一个新对象图 概括地说 我需要一个将
  • 在 MVC3 应用程序的编辑操作方法中使用 AutoMapper

    这是我的控制器代码 它 100 按照我的需要工作 但是 POST 方法没有使用 AutoMapper 这是不行的 如何在此操作方法中使用 AutoMapper 我使用实体框架 4 和存储库模式来访问数据 public ActionResul

随机推荐