用C#打造自己的实体转换器.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用C#打造自己的实体转换器 说明 尽管随着NoSQL的普及,数据库访问的性能已经非常关注的重点了(可以通过架构来解决这个瓶颈),所以有越来越多的项目使用了ORM来访问和操作数据库,在周公的博客上有一个系列的文章来比较ADO.NET和一些常见的ORM,实际上现在周公业余研究的一个项目中,周公也使用了MyBatisNet(由iBatisNet升级而来)。不过仍然有使用ADO.NET的场合,如果使用ADO.NET则免不了要写大量的将DataTable或者DataReader转换成对应的实体类的代码,经过了大约24小时的编码和测试(非连续的,累计的),周公尝试写了一个辅助工具,它可以将DataTable或者DataReader中的数据自动转换成实体类,这个辅助工具只有两个类,一个是负责转换的类,另一个是Attribute类,用以标识实体类的非静态属性与数据集中的数据列的对应关系。 为了便于使用,将所有代码写在了一个文件里,代码中有详尽的注释,所以在这里就不再介绍其原理和如何实现的了。完整的代码如下: view plaincopy to clipboardprint? ///?summary ?? ///?实体阅读器类,可以从DataTable中或者DbDataReader的实例中将数据转换成对应的示例 ?? ///?作者:周公 ?? ///?日期:2011-07-17 ?? ///?博客地址:/zhoufoxcn?或 ?? ///?说明:(1)任何人都可以免费使用,请尽量保持此段说明。 ?? ///??????(2)这个版本还不是最终版本,有任何意见或建议请到/zhoufoxcn处留言。 ?? ///?/summary ?? public?sealed?class?EntityReader?? {?? ????private?const?BindingFlags?BindingFlag?=?BindingFlags.Public?|?BindingFlags.NonPublic?|?BindingFlags.Instance;?? ????//将类型与该类型所有的可写且未被忽略属性之间建立映射 ?? ????private?static?DictionaryType,?Dictionarystring,?PropertyInfo?propertyMappings?=?new?DictionaryType,?Dictionarystring,?PropertyInfo();?? ????//在数据库中常见的存储数据类型(String除外) ?? ????private?static?DictionaryType,?MethodInfo?simpleTypeMappings?=?new?DictionaryType,?MethodInfo();?? ????//存储NullableT与T的对应关系 ?? ????private?static?DictionaryType,?Type?genericTypeMappings?=?new?DictionaryType,?Type();?? ?? ????static?EntityReader()?? ????{?? ????????//加载所有的数值类型及字符串类型 ?? ????????simpleTypeMappings.Add(typeof(String),?GetConvertMethod(typeof(String)));?? ????????simpleTypeMappings.Add(typeof(Byte),?GetConvertMethod(typeof(Byte)));?? ????????simpleTypeMappings.Add(typeof(SByte),?GetConvertMethod(typeof(Char)));?? ????????simpleTypeMappings.Add(typeof(Char),?GetConvertMethod(typeof(Boolean)));?? ????????simpleTypeMappings.Add(typeof(Boolean),?GetConvertMethod(typeof(Boolean)));?? ????????simpleTypeMappings.Add(typeof(Guid),?GetConvertMethod(typeof(Guid)));?? ????????simpleTypeMappings.Add(typeof(Int16),?GetConvertMethod(typeof(Int16)));?? ????????simpleTypeMappings.Add(typeof(UInt16)

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档