在上篇中,介绍了使用NBear.Mapping进行实体对象与ADO.NET对象的互转功能,这可能是我们开发过程中最常的一种映射了。除此之外,NBear.Mapping还支持实体对象与NameValueCollection,IDictionary等弱类型的互换转,下面就让我们来看看吧。

NameValueCollection实体对象

当你希望把Request.QueryString的字段赋值到一个对象时,手工写这段代码你可能会觉得浪费时间了。现在如果NBear.Mapping可能帮你完成这个工作,难道你不会接受吗?只要简单的这样一句代码就可以完成你的工作了。

   1: UserObject outputObject = ObjectConvertor.ToObject<UserObject>(nameValue);

因为NameValueCollection的Value类型是字符串的,但是没有关系,NBear.Mapping会自动进行类型转换的。反过来,如果想把实体对象转换为NameValueCollection对象时,仍然是一样的简单:

   1: NameValueCollection outputObject = ObjectConvertor.ToObject<NameValueCollection>(user);

IDictionary与实体对象

NBear.Mapping支持将实体对象转换为实现了IDictionary的对象,比如Dictionary<string,object>,Hashtable。分别用下面没行代码就可以完成这样的转换:

Dictionary<string, object> outputObject = ObjectConvertor.ToObject<Dictionary<string, object>>(user);
Hashtable outputObject = ObjectConvertor.ToObject<Hashtable>(user);

相反的转换:

Dictionary<string, object> dic = ObjectConvertor.ToObject<Dictionary<string, object>>(user);
Hashtable hashTable = ObjectConvertor.ToObject<Hashtable>(user);
接口使用都是一样的,这里就不再嗸诉(有谁能告知一下Ao Shu是哪两个字 :( )。

性能

前面不止一次的说到,NBear.Mapping有比较优的性能。它有比较好的性能是因为它的转换使用的是动态生IL代码来进行转换的,并且生成的IL代码是有缓存的。其实相当于就是动态的手写代码。在NBear.Mapping.Test的MappingTest中,有4个测试TestPerformance1~4就是测试性能的,每一次转换分别执行100000次,随机进行的一次测试结果如下(手写 VS NBearMapping VS 反射 的性能对比,以手写代码为基准):

DataRow 转实体对象:

Test performance of converting 100000 data rows to class objects
Manually Coding vs NBearMapping vs Reflection
8906250 (1)
vs
11718750 (1.31578947368421)
vs
26093750 (2.92982456140351)

实体对象转实体对象

Test performance of converting 100000 class objects to class objects
Manually Coding vs NBearMapping vs Reflection
312500 (1)
vs
2187500 (7)
vs
15625000 (50)

DataReader 转实体对象

Test performance of converting 100000 dataReader to class objects
Manually Coding vs NBearMapping vs Reflection
7812500 (1)
vs
11406250 (1.46)
vs
29531250 (3.78)

NameValueCollection转实体对象

Test performance of converting 100000 namevaluecollections to class objects
Manually Coding vs NBearMapping vs Reflection
5625000 (1)
vs
12812500 (2.27777777777778)
vs
16875000 (3)

到些为止,NBear.Mapping的使用介绍就告一段落了。除此之外,NBear.Mapping还有一些其它功能,比如配置,自定义映射接口,扩展功能等等,这些功能只要你愿意花一些时间很容易就能够掌握了。NBear.Mapping使用其实就是这么简单,它自己本身也是很简单的,只要你愿意尝试,相信它会给你带来意想不到的效果的。

示例下载

阿不

NBear开发团队

NBear.Mapping使用教程(5):实体对象与NameValueCollection,Dicitonary以及NBear.Mapping性能相关推荐

  1. CAD教程:实体对象复制移动的操作教程

    我们在使用浩辰CAD制图软件绘制图纸的过程中,经常会用到复制功能,那么在复制过程中实体对象怎么复制移动呢? 下面给大家分享一下CAD软件中实体对象复制移动的CAD教程吧! CAD中实体对象复制移动的操 ...

  2. NBear.Mapping使用教程(3):第一个简单例子

    不断有朋友希望能提供一些示例,同时我也发现,单纯发一些文字性的教程.大家好像都没有看明白NBear.Mapping是干嘛用的,所以从这篇开始我会陆续以实例的方式介绍NBear.Mapping的使用,以 ...

  3. 使用EasyPoi导出Word文件,使用@Excel注释导出实体对象图片的解决方案

    目录 一.问题介绍 二.解决方案展示 1.准备Word模板文件 2.部分实体对象 3.重写EasyPoi中ExcelEntityParse类的createCells方法 4.导出Word文件的主逻辑 ...

  4. Asp.Net MVC学习记录之“一个实体对象不能由多个 IEntityChangeTracker 实例引用”

    前言 由于刚刚接触mvc不久,之前都是看一些教程学习的,所以一学会(只是皮毛)就非常兴奋的来做mvc的网站,结果做没多久就出现了一个错误 解决方案 当时度娘了找了好久都没找到有效的解决方案,也上了MS ...

  5. java 根据实体对象生成 增删改的SQL语句 ModelToSQL

    2019独角兽企业重金招聘Python工程师标准>>> java 根据实体对象生成 增删改的SQL语句 ModelToSQL 转载于:https://my.oschina.net/m ...

  6. 鲁棒图的三元素:抽象对象,实体对象和控制对象

    鲁棒图简介 ADMEMS方法推荐以鲁棒图来辅助初步设计.那么,什么是鲁棒图呢? 8.2.1  鲁棒图的3种元素 鲁棒图包含3种元素(如图8-2所示),它们分别是边界对象.控制对象.实体对象: 边界对象 ...

  7. PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化

    标签 PostgreSQL , ulimit , nofile , fs.nr_open , setrlimit 背景 数据库是一种非常庞大的应用系统,就拿PostgreSQL来说,每个实体对象(物化 ...

  8. 阐述Session加载实体对象的过程

    Session加载实体对象的步骤是: ① Session在调用数据库查询功能之前,首先会在一级缓存中通过实体类型和主键进行查找,如果一级缓存查找命中且数据状态合法,则直接返回: ② 如果一级缓存没有命 ...

  9. C#开发Unity游戏教程之游戏对象的行为逻辑方法

    C#开发Unity游戏教程之游戏对象的行为逻辑方法 游戏对象的行为逻辑--方法 方法(method),读者在第1章新建脚本时就见过了,而且在第2章对脚本做整体上的介绍时也介绍过,那么上一章呢,尽管主要 ...

最新文章

  1. 气氛拉满!高校补办2020届毕业典礼,这些专属礼物太戳心......
  2. android与单片机wifi通信原理图,用LT8920做2.4G无线通信原理图与51单片机程序
  3. ASCII可显示字符
  4. Win7系统还原声音图标的方法
  5. 一图胜千言,这本交互式线代教科书让你分分钟理解复杂概念,佐治亚理工出品...
  6. IPsec ***基础:认识IPsec ***
  7. 外媒:麦当劳、星巴克、必胜客开始在萨尔瓦多接受比特币支付
  8. ASP.NET MVC 4 笔记
  9. 如何解决SQL server 恢复挂起状态
  10. 3.Python 进阶知识
  11. Ubantu 查看显卡相关信息
  12. matlab构建boost电路,基于matlab的boost电路仿真.doc
  13. 基于QT+Halcon实现拟合圆形
  14. 武田以3.22亿美元剥离中国大陆非核心业务至海森
  15. Java并发异步编程,原来十个接口的活现在只需要一个接口就搞定!
  16. 神经网络知识点总结,神经网络基础与应用
  17. [附源码]java毕业设计同德佳苑物业管理系统论文
  18. 小说更新太慢怎么办_为什么现在的网络小说更新这么慢
  19. 解决Maven下载依赖文件失败问题
  20. 灰太狼的数据世界(二)

热门文章

  1. JavaScript 基础 数据类型与运算符
  2. java util 中set,List 和Map的使用
  3. 【C/C++】递归算法
  4. 飘逸的python - 字典合并值相加
  5. PushMe(交互式)
  6. 华为HMS生态解析与移动生态盘点
  7. linux下iconv编码转换的用法
  8. /etc/fstab文件出错,无法进入Linux系统
  9. Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
  10. C#删除文件夹以及删除文件