• 对象自动映射工具是用来解决对象之间映射转换的类库,能很好地解决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自动化对象映射的更多相关文章

  1. Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块

    ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...

  2. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  3. 对象映射工具AutoMapper介绍

    AutoMapper是用来解决对象之间映射转换的类库.对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间. 一. AutoMapper ...

  4. EF架构~AutoMapper对象映射工具简化了实体赋值的过程

    回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...

  5. MojoDatabase 源码学习之对象映射

    Mojo-database是我个人比较喜欢多开源项目,下文是该项目打介绍和地址: mojo-database 简介: MojoDatabase is an ActiveRecord-like ORM ...

  6. php设计模式 数据对象映射模式

    数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作. 在代码中实现数据对象映射模式,实现一个ORM类,将复杂的sql语句映射成对象属性的操作.对象关系映射(Obje ...

  7. c#注册表对象映射

    用于快捷保存与读取注册表,为对应的对象 示例 [RegistryRoot(Name = "superAcxxxxx")] public class Abc : IRegistry ...

  8. ASP.NET MVC 模型和数据对象映射实践

    在使用 MVC 开发项目的过程中遇到了个问题,就是模型和数据实体之间的如何快捷的转换?是不是可以像 Entity Framework 的那样 EntityTypeConfiguration,或者只需要 ...

  9. PHP 设计模式 笔记与总结(10)数据对象映射模式 2

    [例2]数据对象映射模式结合[工厂模式]和[注册模式]的使用. 入口文件 index.php: <?php define('BASEDIR',__DIR__); //定义根目录常量 includ ...

随机推荐

  1. Texture to texture2D以及texture2D像素反转

    private void SaveRenderTextureToPNG(Texture inputTex, string file) { RenderTexture temp = RenderText ...

  2. Day 3,学习的知识点

    年龄 如何判断是否未成年人 age = input('请输入你的年龄:')#input=输入age = int(age)#int=转化为整型if age < 18:    print('小妹妹你 ...

  3. Xbim.GLTF源码解析(二):IFC和GLTF的对应关系

    原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10839179.html IFC IFC是建筑信息模型(BIM)数据开放的国际标准,在建 ...

  4. linux C进程常用操作

    不登高山,不知天之高也: 不临深溪,不知地之厚也. 荀子<劝学> linux应用层主要是一个个独立任务的进程在运行,但是很多时候,在工作中我们可能很少去重新写一个进程, 大部分的工作都是分 ...

  5. CPS Tester

    将测出10s的平均cps值 在窗内点击即可 github已编译程序:https://github.com/Ice-watermelon233/cps-tester #include <bits/ ...

  6. T3hack大部分随机化数据

    1000 2000 1 2 1269 1 3 7707 1 4 3329 4 5 6789 1 6 6691 3 7 -1 1 8 2037 6 9 5427 6 10 5690 4 11 4847 ...

  7. VIM编辑器的常用命令及使用!

    在热门Linux操作系统中都会默认安装一款超好用的文本编辑器——名字叫“vim”,vim是vi编辑器的升级版. Vim能够得到这么多厂商与用户的认可,原因就是在Vim编辑器中有三种模式——命令模式.末 ...

  8. 为什么我加了索引,SQL执行还是这么慢(二)?

    接上文 在MySQL中,有一些语句即使逻辑相同,执行起来的性能差异确实极大的. 还记得我们上文中的结论吗:如果想使用索引树搜索功能,就不能使用数据库函数来处理索引字段值,而是在不改变索引字段值的同时, ...

  9. jquery判断手指滑动方向

    jquery判断手指滑动方向 <pre> /*判断哪个滑动方向还是自己改下 要么上下 要么左右*/ var startX; var startY; $(".shanghua&qu ...

  10. 【algo&ds】【吐血整理】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、B树、字典树、红黑树、跳表、散列表

    本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢. 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结 ...