Dapper.Lite 擴(kuò)展
Dapper本身并不方便,需要搭配擴(kuò)展。Dapper是和具體的數(shù)據(jù)庫(kù)無(wú)關(guān)的,再封裝的話,不同數(shù)據(jù)庫(kù)代碼就不一樣了,Dapper.Lite以最小的代價(jià)支持最多的數(shù)據(jù)庫(kù),旨在簡(jiǎn)單易用、穩(wěn)定可靠。
最近重構(gòu)并精簡(jiǎn)了Dapper.Lite,以及不依賴Dapper的版本LiteSql。這兩款ORM基本完工,自薦一下。
Dapper.Lite是一款Dapper擴(kuò)展,單表查詢和SQL拼接查詢條件支持Lambda表達(dá)式,旨在為大家提供一款簡(jiǎn)單易用、穩(wěn)定可靠的ORM,支持Oracle、MSSQL、MySQL、PostgreSQL、SQLite、Access、ClickHouse等數(shù)據(jù)庫(kù)。
它的特色有:
- 單表查詢支持Lambda
List<SysUser> list = session.Queryable<SysUser>().Where(t => t.Id <= 20 && t.Remark.Contains("測(cè)試")).ToList();
單表查詢不需要寫(xiě)SQL了。
這次重構(gòu),連表查詢、子查詢等復(fù)雜功能都刪除了,減少出bug的可能。
- 以SQL為主,無(wú)論何種數(shù)據(jù)庫(kù),都是下面的寫(xiě)法,這是最常用的用法
有的數(shù)據(jù)庫(kù)前綴是@符,有的是:符,但ClickHouse數(shù)據(jù)庫(kù)不一樣,寫(xiě)起來(lái)麻煩一點(diǎn),這里統(tǒng)一了。
session的意思是一次數(shù)據(jù)庫(kù)會(huì)話,主要是為了數(shù)據(jù)庫(kù)事務(wù),如果沒(méi)有事務(wù),可以直接db.Sql
List<SysUser> list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", 20, "%測(cè)試%").ToList<SysUser>(); //參數(shù)按順序來(lái),一兩個(gè)也不容易眼花
或
List<SysUser> list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", new { Id = 20, Remark = "%測(cè)試%" }).ToList<SysUser>(); //參數(shù)多的話就這么寫(xiě)吧
接著拼接:
.Append("and name like @Name", "%測(cè)試%");
- SQL拼接查詢條件支持Lambda表達(dá)式
List<KpTask> kpTaskList = await session
.Sql<KpTask>(@"
select t.*, m.model_start as ModelStart, m.model_end as ModelEnd
from kp_task t
left join kp_model m on m.model_id=t.model_id")
.Where(t => t.IsDel == 0)
.Where(t => new int?[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }.Contains(t.OpeType))
.Where<KpModel>(m => m.ModelStart <= DateTime.Now && DateTime.Now <= m.ModelEnd)
.ToListAsync();
既然寫(xiě)SQL了,肯定是有缺點(diǎn)的,例如,表名改了,SQL也要改。
Where條件寫(xiě)Lambda比寫(xiě)SQL方便一點(diǎn)。
如果你打算用Dapper,并想找一款擴(kuò)展,不妨試試Dapper.Lite,即使有bug,Dapper.Lite的源碼是你能hold住的。

浙公網(wǎng)安備 33010602011771號(hào)