前情提要
又來到介紹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
- 可以透過Linq完成資料庫資料庫DML操作(select, insert, update, delete)
- 可以透過純sql的方式完成DML操作(plain sql, store procedure)
- 可以使用ADO.Net的各種method
- 跨資料庫存取
- 多種資料庫資源
- 一個專案可以設置多個config連線至多個資料庫操作
內容
這篇就以入們應用為主,筆者繼續使用之前設置過的環境,請參考
建立Demo專案
筆者直接使用cli
指令完成建置新專案
1 | mkdir Demo.ORM |
執行看看有無問題
1 | cd Demo.ORM.API |
有看到WeatherForecast
回傳的json
物件列表,表示建置沒問題
安裝SqlSugarCore套件
接著安裝SqlSugarCore
套件
1 | dotnet add package SqlSugarCore |
安裝MysqlConnector套件
因筆者使用的是MySql
資料庫,官方教學文件就有提到MySql
必須安裝相對應的MySqlConnector
1 | dotnet add package MySqlConnector |
註冊SqlSugarClient
接著準備好連線字串,直接宣告於appsettings.development.json
1 | "ConnectionStrings": { |
於Startup中註冊其SqlSugarClient
1 | public void ConfigureServices(IServiceCollection services) |
設置起來,超簡單的,筆者直接使用簡單易用的AutoCloseConnection
模式,只要填入相對應的ConnectionString
,因支援多種資料庫,告訴SqlSugar
說使用哪套資料庫,完畢,跟著筆者測試看看吧。
注入SqlSugarClient
首先建立一個測試用API:CustomerController
1 | using Microsoft.AspNetCore.Mvc; |
就這樣先空著吧,再慢慢填入程式碼,以這樣的Route設置,等等Postman測試時使用api/customer
即可,接著宣告並注入SqlSugarClient
實體
1 | using Microsoft.AspNetCore.Mvc; |
實作查詢
筆者為示範,就不用在分層什麼的了,直接將查詢語法實作於Controller中
建立Customer資料表對應之Model
建立一個Models
資料夾,並新增一個Customers.cs
1 | namespace Demo.ORM.API.Models |
實際撰寫查詢語法
實際於Action
中撰寫查詢語法,筆者這邊使用上面步驟所注入之SqlSugarClient
實體,使用Queryable
方法取得客戶資料,可以使用Select
取得特定欄位或物件,最後ToList
才做真正查詢作業
1 | /// <summary> |
查詢結果
實際使用Postman
做查詢,連結為http://localhost:5000/api/customer,使用HttpPost
,並按下送出
,就會看到結果了
結論
這篇就以這樣簡單介紹使用方式了,筆者留個伏筆吧,Chloe
雖好用,但對於筆者常接觸到的工作環境基本上都是DBFirst
的方式設計資料結構為主,對於程式端中建立資料庫中的表對應之Model
,手動建立則著實費力,SqlSugar
提供自動產生的程式碼,若妥善利用並加以包裝,也一樣會享有EFCore
的scaffold
一樣的服務喔,下一篇就教學自動建立資料庫對應物件的方法吧,敬請期待。
參考