程式設計

Dapper 輕量化的ORM優缺點,C#資料庫操作的好組件

其實當初在開發Web API的時候,在考慮要用EF Core還是Dapper。Dapper是知名程式設計論壇開發的一個Open Source組件,主打是輕量化,可以輕鬆地使用寫SQL語句方式如同ADO.NET的做ORM。

這邊大致上寫一下Dapper在使用的時候遇到的優點與缺點,我們產品部門開會以後因為大家都擅長寫SQL語句,所以挑選了Dapper,結論是我們覺得這個決定相當正確。

輕量化的好處

EF Core相對的就比較重量級,Dapper可以使用類似ADO.NET的方式直接將SQL語句呼叫以後放到Object裡面去。

ADO.NET對於早期的C#程式設計師來說是相當熟悉的,主要是用SqlCommend來做很多資料庫的操作。

這些SqlCommend透過Dapper可以直接不用使用DataTable,變成宣告一個Class然後寫到Class裡面。

然後支援列舉方式或者ToArray()、ToList(),資料的取得速度完全取決於下的SQL語句的好壞,這個掌控度就很高了。

比如可以在SQL語句裡面下自定義的SQL Function來取得所有的物品和庫存統計(純量函數)。

或者在SQL裡面很容易的加上第幾筆到第幾筆資料,也可以把兩三個表做合併排序。

只要SQL下的了,Dapper就是很輕易可以做到。

然後它可以用SqlParamater方式來防止SQL Injection攻擊。

缺點

Dapper最大的缺點也是最怕的地方就是拼錯字或者根本搞錯欄位。或者SQL語句格式不符合(比如字串相加時多了一個AND在結尾)。

這個會增加很多開發時間,在複雜的條件的WHERE字串增減上面。

所以最好的方法就是自己寫一個SelectCmdBuilder物件,物件處理好所有的例外狀況,只要用SCB.addAndWhere(“nickname like @nickname”)之類的方法,最後SCB.ToSQLString()。

只是這個物件就得寫得很複雜,因為有些AND裡面有(),()裡面可能有OR。

當然這類的物件我只做了基本的款式,太複雜的還是得自己手動下指令,不然光是設計物件就得花我太多時間。

就算設計好這種東西,手殘還是會手殘,打錯字照樣會報錯,如果兩個Column Name太像搞錯欄位會花很久在偵錯。

結論

Dapper可以節省開發時間很多,尤其只需要設計Class的模型,就可以用SQL語句將資料放到模型裡面。

尤其對於ADO.NET有開發過的程式設計師是相當友善的方式。

What's your reaction?

Excited
0
Happy
0
In Love
0
Not Sure
0
Silly
0

Comments are closed.