前情提要
筆者這邊已經寫了幾篇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都幫我們轉成什麼語法,才不會誤用造成錯誤,筆者覺得是值得投資的。