网上电玩城捕鱼

网上电玩城捕鱼

捕鱼电玩城星力 Dapper是近2年异军突起的新ORM工具

作者:apefpi 发布时间:2019-08-15 19:16

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的话,大可不必批改