AutoMapper官方文档(十五)【映射继承】

DIY智能像素灯牌:从WS2811选型到xLights动画全流程解析 可编程LED(如智能像素灯)通过集成控制芯片,实现了对单个灯珠颜色与亮度的独立寻址控制,其核心原理在于采用单线归零码通信协议,在一条数据线上串联传输RGB数据。这项技术的工程价值在于能够以极低的布线复杂度构建高密度、可动态编程的大型光显装置。在灯光秀、建筑装饰、艺术装置等应用场景中,它使得复杂图形动画和音乐同步成为可能。本文以制作一个户外大型虎爪灯牌为例,深入探讨了12V WS2811灯珠在应对电压降挑战时的优势,并详细介绍了如何利用xLights软件进行虚拟模型映射与灯光序列编程,从而完成从数字设计到物理 阅读详情

映射继承有两个功能:

     从基类或接口配置继承映射配置
     运行时多态映射

继承基类配置是opt-in,您可以显式指定要从包含基本类型的配置继承的映射,也可以在包含IncludeBase的派生类型配置中指定该映射::

CreateMap<BaseEntity, BaseDto>()
   .Include<DerivedEntity, DerivedDto>()
   .ForMember(dest => dest.SomeMember, opt => opt.MapFrom(src => src.OtherMember));

CreateMap<DerivedEntity, DerivedDto>();

或者

CreateMap<BaseEntity, BaseDto>()
   .ForMember(dest => dest.SomeMember, opt => opt.MapFrom(src => src.OtherMember));

CreateMap<DerivedEntity, DerivedDto>()
    .IncludeBase<BaseEntity, BaseDto>();

在上面的每种情况下,派生映射从基本映射配置继承自定义映射配置。

运行时多态性

示例:

public class Order { }
public class OnlineOrder : Order { }
public class MailOrder : Order { }

public class OrderDto { }
public class OnlineOrderDto : OrderDto { }
public class MailOrderDto : OrderDto { }

Mapper.Initialize(cfg => {
    cfg.CreateMap<Order, OrderDto>()
        .Include<OnlineOrder, OnlineOrderDto>()
        .Include<MailOrder, MailOrderDto>();
    cfg.CreateMap<OnlineOrder, OnlineOrderDto>();
    cfg.CreateMap<MailOrder, MailOrderDto>();
});

//执行映射
var order = new OnlineOrder();
var mapped = Mapper.Map(order, order.GetType(), typeof(OrderDto));
Assert.IsType<OnlineOrderDto>(mapped);

你会注意到,因为映射对象是一个OnlineOrder,AutoMapper已经看到你有一个比OrderDto更具体的OnlineOrder映射,并自动选择它。

在派生类中指定继承

您可以从派生类中指定继承,而不是从基类中配置继承:

Mapper.Initialize(cfg => {
  cfg.CreateMap<Order, OrderDto>()
    .ForMember(o => o.Id, m => m.MapFrom(s => s.OrderId));
  cfg.CreateMap<OnlineOrder, OnlineOrderDto>()
    .IncludeBase<Order, OrderDto>();
  cfg.CreateMap<MailOrder, MailOrderDto>()
    .IncludeBase<Order, OrderDto>();
});

继承映射优先级

这引入了额外的复杂性,因为有多种方法可以映射属性。 这些来源的优先顺序如下

    显式映射 (using .MapFrom())
    继承的显式映射
    忽略属性映射
    约定映射(通过约定匹配的属性)

为了演示这个,让我们修改上面显示的类

//领域对象
public class Order { }
public class OnlineOrder : Order
{
    public string Referrer { get; set; }
}
public class MailOrder : Order { }

//Dtos
public class OrderDto
{
    public string Referrer { get; set; }
}

//映射
Mapper.Initialize(cfg => {
    cfg.CreateMap<Order, OrderDto>()
        .Include<OnlineOrder, OrderDto>()
        .Include<MailOrder, OrderDto>()
        .ForMember(o=>o.Referrer, m=>m.Ignore());
    cfg.CreateMap<OnlineOrder, OrderDto>();
    cfg.CreateMap<MailOrder, OrderDto>();
});

//执行映射
var order = new OnlineOrder { Referrer = "google" };
var mapped = Mapper.Map(order, order.GetType(), typeof(OrderDto));
Assert.Equals("google", mapped.Referrer);

请注意,在我们的映射配置中,我们忽略了Referrer(因为它在Order基类中不存在)并且具有比约定映射更高的优先级,所以该属性不会被映射。

总的来说,这个特性应该使AutoMapper能够使用继承的类更加自然。

AutoMapper 使用手册以及扩展 可以看到,映射后,dto 中两个元素的类型,一个是 EmployeeDto,一个是 EmployeeDto2,即实现了父类映射到父类,子类映射到子类。/// 数据源的成员变量的命名规则。/// 数据源的成员变量的命名规则。/// new PascalCaseNamingConvention() 帕斯卡命名规则(每个单词的首字母大写) 阅读详情

相关推荐

精通AutoMapper:.NET中的高效对象映射技巧

AutoMapper 是一个对象到对象的映射工具,常用于 .NET 开发中,以简化复杂对象之间的转换过程。其设计目的是为了减少开发者在数据模型转换时编写重复的映射代码,从而提高开发效率。映射配置是AutoMapper库的核心概念之一,它定义了不同对象类型之间的转换规则。通过映射配置,开发者可以指定源对象的哪些属性对应目标对象的哪些属性,以及转换过程中可能需要进行的任何自定义操作。映射配置的主要作用在于简化数据转换过程,减少重复代码,提高开发效率和维护性。例如,当从一个User类映射到一个。

weixin_30591519的博客 1199

AutoMapper总结

  AutoMapper是一个对象和对象间的映射器。对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作的。让AutoMapper有意思的地方在于它提供了一些将类型A映射到类型B这种无聊的事情的有趣惯例。只要类型B遵守AutoMapper已经建立的惯例,大多数情况下,映射两种类型零配置就可以了。   首先,需要有source(源)和d...

weixin_34348174的博客 313

AutoMapper的使用

1.包含AutoMapper.dll 在工程的Lib文件夹下 2.AutoMapper用法 - Qi Fei - 博客园.png 参考图片 3.工程为简单的代码演示,有注释,请大家参考

c#实体转换工具AutoMapper的使用讲解和扩展

背景介绍: 1.在开发中,我们经常需要将实体查询出来的实体转换为页面展示实体,这个页面展示的实体,其实我们口中常说的DTO(Data Tranfer Object) 2.我们查询完数据库数据后,如何转换为DTO呢,抛开手写,就要使用到工具了,今天带来的是一款轻量级的实体转换工具:AutoMapper 3.备注一下,AutoMapper十分强大,自己之前也踩过一些坑,但是我自己平时开发是不使用这个玩意的,我自己写了一套实体转换和映射,但是不代表AutoMapper不好哈,大多数玩家还是可以直接拿来开箱即...

Ling、bug 1255

SKF SimPro Quick 4.8.1发布

发布说明可以在SimPro手册的SKF SimPro Quick应用程序的一般部分下找到(帮助→SKF SimPro快速手册→一般→发布说明)。请删除旧版本,请备份您存储在C:\SKF SimPro xxx\files文件夹中的文件以及所有自定义报告模板和表格。我们很高兴地通知您,我们的轴承应用工程软件SKF SimPro Quick 4.8.1可供下载。将新的安装文件下载到本地计算机后,双击它安装向导将打开(按照说明操作)3.安装后,在本地机器上启动SKF SimPro Expert软件。

小韩的博客 1816

Brim与ZUI协同安装指南:从下载到流量分析实战

本文提供Brim与ZUI协同安装与实战指南,详细讲解从下载、环境变量配置到流量分析的全流程。通过将PCAP文件转换为ZNG格式,结合直观的Zed查询语言,这套组合能极大提升大型网络数据包的分析效率,是网络安全与运维人员进行高效流量分析的利器。

metal的博客 456

AutoMapper官方文档(一)【入门】

什么是AutoMapper?AutoMapper是一个对象与对象的映射器。对象-对象映射通过将一种类型的输入对象转换为不同类型的输出对象来工作。让AutoMapper感兴趣的是,它提供了一些有趣的约定,从而弄清楚如何将类型A映射到类型B.只要类型B遵循AutoMapper建立的约定,映射两种类型几乎就是零配置。为什么使用AutoMapper?映射代码很无聊。测试映射代码更无聊。 AutoMapper

极客神殿 8244

做小程序支付时,我是怎么被“虚拟支付”绊了一跤的

微信小程序支付开发中,普通支付与虚拟支付存在本质差异。开发者常误将虚拟权益(会员、点数等)当作普通商品支付,导致审核失败。两者在审核关注点、结算方式、API调用及平台政策上都截然不同。关键点在于:1)先明确交易对象类型;2)产品命名需真实反映权益性质;3)支付成功≠业务完成;4)审核说明要详细描述交付逻辑;5)避免依赖过时规则。正确顺序应是:判断商品属性→选择支付类型→设计订单系统→准备审核材料。这个认知差异比技术实现更重要,提前理解平台规则可大幅减少返工。

zhurizhe71的学习之路 2577

【C#】AutoMapper 使用手册

文章目录1 入门例子2 注册2.1 Profile3 配置3.1 命名约定3.2 配置可见性3.3 全局属性/字段过滤3.4 识别前缀和后缀3.5 替换字符4 调用构造函数5 数组和列表映射5.1 处理空集合5.2 集合中的多态6 方法到属性映射7 自定义映射8 扁平化映射8.1 IncludeMembers9 嵌套映射 本文基于 AutoMapper 9.0.0 AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象。 官网地址:http://automapper.org/ 官方

guliang21的专栏 1627

Shopee App加密算法逆向实战:从抓包到libshpssdk.so的深度解析

本文详细解析了Shopee App加密算法的逆向过程,从网络抓包发现加密参数入手,通过Frida动态Hook定位到Java层关键方法,并深入追踪至Native层的libshpssdk.so核心函数。文章结合实战演示了如何利用Unidbg模拟执行环境进行算法分析与验证,并探讨了核心参数生成逻辑及风控规避要点,为移动安全与逆向工程研究提供了完整的技术路径。

weixin_28347369的博客 527

利用抖音Cookie充值接口提取支付链接,调起原生微信h5支付宝h5支付

最近开始搞一些个人支付通道的开发,方便个人不用和第三方平台签约就能收款,省去很多流程手续的成本。 然后翻了一下网上并没有太多现成的技术教程,只能自己研究着搞了。 这次要分享的是利用抖音的充值接口,去分析提取出支付链接,分别包含微信原生支付的h5支付链接,和支付宝h5支付链接。 微信h5支付: 抖币充值,抖音充值,抖音直播充值官方入口 - 抖音 支付宝h5支付 抖币充值,抖音充值,抖音直播充值官方入口 - 抖音 整个开发流程思路是以下几步: 1.抓包分析抖音的充值的整个流程,提取关键的一些

Android-逆向的博客 6564

AutoMapper 继承映射(Mapping Inheritance)完整指南:配置继承、运行时多态与优先级机制

映射继承(Mapping Inheritance)是 AutoMapper 面向继承体系的对象映射的核心能力,它解决了两类问题:**让派生类型映射自动继承基类映射中手写的自定义配置**,以及**在运行时根据对象实际类型自动选择更具体的映射(运行时多态)**。本指南基于 AutoMapper 官方文档并结合仓库源码(`docs/source/Mapping-inheritance.md` 与 `sr

gitblog_00379的博客 1006

HyperLynx(十四)高级分析技术

如果没有查找到该模型,可使用菜单命令“Setup”→“Options”→“Directories”,打开“Set Directories”对话框,单击“Edit”按钮,在“Select Directories for IC-Model Files”对话框中将路径“…在“Assign Models”对话框中的“Port”栏找到“OUTM”端口,在其对应的“Circuit Connection”栏中选择“txout”项。将端口R75连接到“Gnd”。同样,将“EMP”连接到“V”,完成预加重设置。...

小幽余生不加糖 4948

在 C# 中使用 AutoMapper 进行对象映射

C# 中使用 AutoMapper 进行对象映射。AutoMapper 是一个非常强大的工具,它可以减少手动编写映射代码的工作量

Hellc007的博客 2295

【华为OD机试真题】7、字符串筛选排序 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母(k>=1) 输出该字母所在字符串中的位置索引(字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引 如果有重复字母则输出字母的最小位置索引

KJ.JK 2265

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)详细介绍了3D-EM Full Wave Extraction全波S参数提取,下面以一个差分过孔结构进行实例分析,以下图为例。模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构。是一个简单的4层板,top换层到bottom层的差分过孔结构。起始频率为100Mhz,截止频率为20Ghz,线性扫描。上面那根曲线是插损,下面那根线是回损。

weixin_54787054的博客 342

.NET对象映射库AutoMapper

在此示例中,“CreateMap”方法创建了一个新的映射关系,该映射关系将Employee对象映射到EmployeeDTO对象。AutoMapper是一个.NET对象映射库,它可以自动将一个对象的属性值映射到另一个对象中。注意,为了使AutoMapper能够映射对象,两个对象必须具有相同的属性名称和类型。另外,AutoMapper提供了许多自定义选项,例如条件映射、后期操作等,您可以根据您的需要轻松地使用它们。此外,AutoMapper还支持批量对象的映射,以及其他高级映射功能,例如条件映射、后期操作等。

qq_40796482的博客 2682

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

AutoMapper详解

简单来说,AutoMapper是以.NET(C#)语言开发的一个轻量的处理一个实体对象到另一个实体对象之间映射关系的组件库。开发人员需要做的是通过AutoMapper配置两个实体对象之间的一些映射关系。就可以直接实现映射关系的复用,提高开发效率,减少重复代码。为了降低现代开发框架的复杂度,往往需要做代码分层,分层之后,必然出现不同的数据承载对象VO、BO、Entity ,从设计的角度来说,VO、BO、Entity 的设计思路并不违反 DRY 原则,为了分层清晰、减少耦合,多维护几个类的成本也并不是不能接受的

李宥的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

创建自己的AutoMapper类,从此不用手动建立对象映射

AutoMapper-对象自动映射 在企业应用开发中,很多时候都需要将一个对象转换为另一个对象,比如说在WCF应用的开发中,需要将一个Entity转换为一个Contract对象。大部分情况下,这两个对象会非常相似,有个相同的属性名和类型。如果每次我们都要手写这中转换代码,不但容易出错,而且工作量也非常可观。所以开发一个自动映射类还是非常必要的。我们把此类命名为AutoMapper,它应该实现以下

草莽的专栏 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C#类对象映射AutoMapper

AutoMapper是C#中简化对象映射的流行库,通过自动处理属性赋值减少重复代码。核心概念包括源类型、目标类型和映射配置,通过Profile类定义规则。支持属性名不一致映射、忽略属性、条件映射、嵌套对象映射和自定义类型转换器等高级功能。常见错误包括缺少映射配置、空引用等,可通过配置检查和DI容器管理解决。建议使用配置文件集中管理规则,保持命名规范统一,并测试映射完整性以提高开发效率和可维护性。

m0_51559565的博客 1229

(十五).net之AutoMapper

AutoMapper是对象到对象的映射工具。在完成映射规则之后,AutoMapper可以将源对象转换为目标对象。

lwy 1333

对象映射从未如此简单!C#.NET AutoMapper 超详细教程

AutoMapper是一个开源的对象映射库,通过约定和配置自动实现对象属性转换,减少手动编码。它支持简单对象、集合、嵌套对象的映射,并提供自定义属性映射、条件映射、忽略属性等高级功能。通过Profile配置映射规则,注册到DI容器后即可注入使用。AutoMapper能有效解耦数据模型,简化DTO与实体间的转换,提升开发效率。其基于表达式树的预编译机制保证了运行时高性能。

tangPHP的博客 1529

在 ASP.NET Core 中使用 AutoMapper 使 Entity 和 Resource 之间进行映射

目录从 NuGet 安装 AutoMapper添加 Entity类 和 Resource类添加一个 Profile文件,配置映射关系在Startup中对AutoMapper进行注册在项目中使用AutoMapper进行映射 从 NuGet 安装 AutoMapper 在使用 AutoMapper 时,核心的包是 AutoMapper 和 AutoMapper.Extensions.Microsoft...

MaleDeer 1263

automapper自动创建映射_.net core 2.2 运用 AutoMapper 实现实体之间映射,很方便

一、什么是AutoMapper?AutoMapper是一个简单的对象映射框架(OOM),将一个对象映射到另一个对象。二、AutoMapper的好处以前的时候我们将DTO对象转换为Model对象时,我们必须将每一个属性都手动映射实体类 /// /// 用户表 /// [Table("tb_User")] public class TbUser { ...

weixin_39611510的博客 252

Windows 任务栏怎么变透明?免费开源 TranslucentTB 五种效果与动态场景完整指南

你精心选的壁纸,总被屏幕底部那条灰色任务栏拦腰截断。TranslucentTB 是一款免费开源工具,让 Windows 10/11 的任务栏变透明、模糊或亚克力质感,装上即可用、无需重启。 [![Windows 任务栏透明效果展示](https://raw.gitcode.com/gh_mirrors/tr/TranslucentTB/raw/322e2b7395a519751501262763

gitblog_00367的博客 419
上一篇: AutoMapper官方文档(十四)【依赖注入】
下一篇: AutoMapper官方文档(十六)【可查询扩展】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值