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