最新开班
课程名称 报名截止 报名人数
高中起点学习班 即将开班 热招中
企业委培订制班 即将开班 热招中
私人名师辅导班 即将开班 热招中
待业速找工作班 即将开班 热招中
专家大课堂
accp
accp
男生
女生学什么好?女生学什么有前途?
高中落榜怎么办?高中生可以学软件么?
专职、再就业,让你的生涯不再与苦累相伴。
联系方式
地图

免费咨询:400-696-8028

报名电话:0731-88122069

学校地址:长沙市开福区金霞跨境产贸城北大青鸟校区

orm工具Dapper在多数据库方面的优化

 Dapper是近2年异军突起的新ORM工具,它有ado.net般的高性能又有反射映射实体的灵活性,非常适合喜欢原生sql的程序员使用,而且它源码很小,十分轻便。我写本博客的目的不是为了介绍Dapper,而是要将我使用Dapper迁移数据库过程中遇到的bug和*些优化介绍给大家,Dapper在多数据库支持上有些问题,我做了以下5个方面的优化。


*:Dapper核心库存在*个重要的bug是各数据库默认返回类型不同造成的,像count,sum等*些函数在不同的数据库返回类型不同。比如 select count(1) from Table;  sqlserver返回值类型是int,oracle是decimal,mysql是long。那么

connection.Query<int>("select count(*) from Table ");

这条语句运行在sqlserver下没问题,其他数据库会因为类型不匹配报错。同样的,Dapper要求实体对象的类型必须严格的与数据库类型**对应(主要是出现在int,byte和enum类型上)。解决的办法是将强制转换类型改为通用转换,把Dapper代码中的这句return val is DBNull ? null : val;

改为:return val is DBNull ? null : Convert.ChangeType(val, type);


 

二:没有提供参数前缀转换的功能,这点可以在SetupCommand方法中自行写方法替换。


 

三:Dapper只提供*基本的orm框架,对增删改没有提供简便的方法,Dapper扩展类就是提供这类功能的,但此扩展类存在*个不足:增改时会将实体所有字段都拼接到sql中,无法只增改部分字段,把nullable类型的字段当做普通字段处理。这里我进行了优化:拼接sql时判断字段的值是否为空,为空的字段不做处理。


四:官方的Dapper扩展类参数前缀用的是"@",这不符合规范,改为通过

IDbConnection类型判断加前缀。


五:添加各数据库通用分页方法及TOP方法。

做这么多优化目的只有*个:能够无缝的迁移数据库。如果你*直就用sqlserver的话,大可不必修改

上一篇:怎样删除windows.old文件
下一篇:WinForm - 会说话的程序

长沙科泰
长沙科泰
长沙科泰IT教育