1. 程式人生 > >輕量ORM-SqlRepoEx (九)與Dapper共舞

輕量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