阿不

潜水

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  212 随笔 :: 0 文章 :: 3078 评论 :: 107万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

上篇中,介绍了使用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开发团队

posted on   阿不  阅读(4846)  评论(20编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示