轻量ORM-SqlRepoEx (九)与Dapper共舞
dapper就另一个轻量orm,dapper及其扩展解决了数据访问端的大部门问题,提供了如数据事务管理、缓存等支持。sqlrepoex的重点解决了lambda转换成sql语句,使sql使用强类型编写,减少字串错误的,实现编译时检查。
sqlrepoex同时也实现了数据的映射和访问,因而dapper并不是sqlrepoex所必需的,但dapper中有些如数据事务管理、缓存等功能还是很不错的。使用dapper需拼接sql字串,而sqlrepoex可以生成sql字串,这种结合,还是很相匹配的。
可以通过两种方式实现sqlrepoex 与 dapper 互动。
一、直接用sqlrepoex 生成sql语句,然后将此sql作参给 dapper就可以了,这种做法可以在利用sqlrepoex 强大的lambda解析sql的功能,同时也可完全使用dapper的功能,如果项目原来使用过dapper,也不会对原有代码形成任何影响。
二、使用 sqlrepoex.adapter.dapper 库,可不关心 如何使用dapper, sqlrepoex.adapter.dapper 实现了两个sqlrepoex的功能类,dapperstatementexecutor,dapperentitymapper,注册这两个类,然后,就实现了使用dapper来读写数据。
string connectionstring = "datasource=127.0.0.1;username=test;password=test;database=sqlrepotest;charset=gb2312;sslmode = none;";
var connectionprovider = new mysqlp.connectionstringconnectionprovider(connectionstring);
mysqlrepofactory.useconnectionprovider(connectionprovider);
mysqlrepofactory.usestatementexecutor(new dapperstatementexecutor(connectionprovider));
mysqlrepofactory.usedatareaderentitymapper(new dapperentitymapper());
var repository11 = mysqlrepofactory.create<todo>();
var results11 = repository11.query().select(e => e.id, e => e.task, e => e.createddate).top(6);
foreach (var item in results11.go())
{console.writeline($"{item.id}\t {item.task}\t {item.createddate}\t {item.remark}");}
本例源码见:
https://gitee.com/azthinker/sqlrepoex2.0demo/tree/master/demos/gettingstarteddapper
或
https://github.com/azthinker/sqlrepoex2.0demo/tree/master/demos/gettingstarteddapper