.NET自动化对象映射
对象自动映射工具是用来解决对象之间映射转换的类库,能很好地解决DTO和Model之间的相互映射赋值问题。
- 只要两个对象的属性具有相同名字(或者符合它规定的命名约定),对象自动映射工具就可以替我们自动在两个对象间进行属性值的映射。
========== 原创作品 作者:未闻 出处:博客园·布道阁 ==========
一、知识点
1. 为什么需要自动化对象映射?
因为项目开发经常遇到的两大核心问题:如何提高效率、如何提升质量。
2. 它可以做什么?
通过快速实现类对象间的映射(主要解决DTO与模型间的赋值转换)问题,减少编码,从而提高开发效率。
3. 主流技术方案
二、具体实现(选取最丰富的AutoMapper、最精简的TinyMapper作为示例)
1. AutoMapper
- 下载Nuget包
- AutoMapper是基于约定映射的,因此在应用之前需要先调用绑定
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Source, Destination>();
});- AutoMapper提供两种静态方法可以进行对象映射
// 新建映射对象
var dest = Mapper.Map<Destination>(src); //为已存在的对象赋值:
Mapper.Map(src, dest);- AutoMapper提供自定义的映射方式
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.PropertyDest, opt => opt.MapFrom(src => src.PropertySrc));
2. TinyMapper
- 下载Nuget包
- TinyMapper基于约定映射,因此在应用之前需要先调用绑定
TinyMapper.Bind<Source, Destination>();
- TinyMapper提供两种静态方法可以进行对象映射
//新建映射对象:
var dest = TinyMapper.Map<Destination>(src); //为已存在的对象赋值:
TinyMapper.Map(src, dest);- TinyMapper提供自定义的映射方式
TinyMapper.Bind<Source, Destination>(cfg =>
{
cfg.Ignore(src => src.Property);
cfg.Bind(src => src.PropertySrc, dest => dest.PropertyDest);
});
3. 用法比较
* Add方法
* Edit方法
* Get方法
4. 性能对比
AutoMapper | TinyMapper | ||
组件版本 | 9.0.0 | 3.0.2-beta | |
组件大小 | 268KB | 53KB | |
最后更新时间 | 2019.08.12 | 2018.06.07 | |
使用方式 | 静态方法、依赖注入 | 静态方法 | |
自定义映射 | 支持、功能强大、灵活 | 支持 | |
列表对象映射 | 支持 | 支持,需额外映射 | |
性能(ms) | Add | 32.75 | 2.34 |
Edit | 19.93 | 1.63 | |
Get | 10.62 | 1.13 | |
Pager(100) | 103.54 | 146.22 | |
Pager(5000) | 233.18 | 147.94 |
三、总结
1. 通过上面的示例可以看到,使用自动化对象映射工具,比手工映射的代码量要少非常多,对系统开发而言,减少的工作量是非常可观的,可以大大加快开发效率。
2. 性能上,手工映射 > TinyMapper > AutoMapper,所以在局部复杂的映射上可以采用手工映射。
四、参考资料
.NET自动化对象映射的更多相关文章
- Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块
ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...
- .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper
好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...
- 对象映射工具AutoMapper介绍
AutoMapper是用来解决对象之间映射转换的类库.对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间. 一. AutoMapper ...
- EF架构~AutoMapper对象映射工具简化了实体赋值的过程
回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...
- MojoDatabase 源码学习之对象映射
Mojo-database是我个人比较喜欢多开源项目,下文是该项目打介绍和地址: mojo-database 简介: MojoDatabase is an ActiveRecord-like ORM ...
- php设计模式 数据对象映射模式
数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作. 在代码中实现数据对象映射模式,实现一个ORM类,将复杂的sql语句映射成对象属性的操作.对象关系映射(Obje ...
- c#注册表对象映射
用于快捷保存与读取注册表,为对应的对象 示例 [RegistryRoot(Name = "superAcxxxxx")] public class Abc : IRegistry ...
- ASP.NET MVC 模型和数据对象映射实践
在使用 MVC 开发项目的过程中遇到了个问题,就是模型和数据实体之间的如何快捷的转换?是不是可以像 Entity Framework 的那样 EntityTypeConfiguration,或者只需要 ...
- PHP 设计模式 笔记与总结(10)数据对象映射模式 2
[例2]数据对象映射模式结合[工厂模式]和[注册模式]的使用. 入口文件 index.php: <?php define('BASEDIR',__DIR__); //定义根目录常量 includ ...
随机推荐
- windows 10 环境下 使用Anaconda搭建 TensorFlow 环境
##大致步骤 1 安装Anaconda 2 在Anaconda中建立虚拟TensorFlow的虚拟环境 建立虚拟环境的命令是 conda create -n tensorflow python=3. ...
- 大觅网05Day
1.Mycat概述 在此前的服务器对数据库的存储数量要求并不高的时候,被经常使用的MySql数据基本能够满足对数据存储的要求. 但随着技术的不断发展,MySql甚至Redis都无法满足现今存储数量的指 ...
- Elastic search集群新增节点(同一个集群,同一台物理机,基于ES 7.4)
一开始,在电脑上同一个集群新增节点(node)怎么试也不成功,官网guide又语焉不详?集群健康值yellow(表示主分片全部可用,部分复制分片不可用) 最后,在stackoverflow上找到了答案 ...
- H5与CSS3常用设置
1.设置div铺满全屏 对于一个div1,要使其属性height:100%生效,需要使其所有父元素,有确定的属性height.要铺满全屏,就是从html开始,所有的height为100%. 2.垂直居 ...
- Oracle 相关操作SQL
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,l.os_user_name,s.machi ...
- Linux 如何创建或删除以横杠(-)开头的文件或目录
小测试: [root@test test]# ls [root@test test]# touch -abc touch: invalid option -- 'b' Try `touch --hel ...
- git 命令归纳版
1.克隆: 单纯的克隆名字: git clone [url] 自定义新建项目名称: git clone [url] [项目名字] 2.跟踪文件: git add [文件名] 3.添加忽略文件 ...
- MIT线性代数:19.行列式和代数余子式
- python中str.isdigit()用法
str.isdigit()中只包含数字返回true,包含其它则返回false
- 网络安全-主动信息收集篇第二章-二层网络扫描之scapy
scapy是python第三方库文件,可以使用python进行调用也单独进行使用. 非常强大可以用于抓包.分析.创建.修改.注入网络流量. 使用scapy 详细使用方式可以查看github:https ...