前情提要
筆者這邊已經寫了幾篇SqlSugar
的介紹文章,筆者一開始就形容SqlSugar
是EFCore
跟Dapper
的完美融合體,結合兩個套件有的優點並極大化其效用,就像這篇的主題,SqlSugar
有提供產生實體的相關API,筆者目標是加以包裝變成是一個dotnet tool
,可以透過下指令的方式完成產生實體作業。
有在觀看筆者的ORM系列文就知道,其中EFCore
就這麼一篇出現過,即使用override
SaveChanges
方法來達到針對共同欄位的新增、編輯功能,什麼叫共同欄位
,筆者常設計的就是CreatedAt
、CreatedBy
、UpdatedAt
、UpdatedBy
等,這因開發環境不同,習慣的命名方式可能不一樣,但一樣的是,要紀錄該筆資料列的新增、編輯的時間及使用者,原因就這麼單純。
若以Dapper
或ADO.Net
以純SQL的方式製作,會在Insert
、Update
語法上多組這些相關欄位上去,也不是不行,但以一個大型系統來說,若偏後台管理平台來說,這些欄位都是極重要,且每張資料表皆必須要有,這時每段Service都要填上,也是會累死人,[DotnetCore]ORM系列-EFCore:資料表共同欄位設定就是於EFCore
世界中的解決方式,筆者今天想要來聊聊Chloe
的解決方式。
昨日介紹完SqlSugar
後,是否被他的簡單易用吸引了呢,筆者今天就介紹它的查詢實作,就會漸漸發現其功能之強大,今天就照https://www.donet5.com/Home/Doc?typeId=1187操作一遍吧。
又來到介紹ORM框架的時候到了,筆者之前就介紹過類似的[DotnetCore]ORM系列-Chloe:入門篇,總覺得差一點,類似像Interceptor
, Chloe部份是DataBag的概念,可以於Interceptor
事件間傳遞物件,筆者寫過一篇[DotnetCore]ORM系列-EFCore:資料表共同欄位設定,其中針對每個表中共同擁有的欄位做更新時著實方便。Chloe
也不是做不到,因Interceptor
中可存取到IDBCommand
,必須自己加以實作,不像EFCore
、SqlSugar
那樣有包好的事件可使用。筆者於公司開發專案環境中使用EFCore
、Dapper
,由於Dapper
必須得撰寫sql,Insert、Update時EFCore
方便些,由於筆者對於EFCore
也不是非常熟捻,因此於Hangfire
併發Job時吃了一點苦,高併發會導致連線錯亂,直接噴無法連線資料庫等各種不可控的錯誤,心念一轉,何不直接導入此主題要介紹的ORM框架-SqlSugar
筆者前篇介紹Select相關的method[DotnetCore]ORM系列-Chloe:Select篇,這次要來寫interceptor,觀察看看那些select method對應的sql語法,才會知道Chloe都幫我們轉成什麼語法,才不會誤用造成錯誤,筆者覺得是值得投資的。