C# 資料操作系列 - 13 SugarSql初探
阿新 • • 發佈:2020-05-22
# 0. 前言
前言,暫時揮別NHibernate(雖然我突然發現這玩意還挺有意思的,不過看得人不多)。大步進入了有很多小夥伴向我安利的SQLSugar,嗯,我一直叫SugarSQL,好像是這個吧?
這是一個由國內開發者開發的ORM框架,是一個輕量級框架(最新版的sqlSugarCore大概只有290kb)。下圖是sqlSugar的功能描述:
![功能說明](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200522180736016-740573320.png)
從圖中我們能夠大概看出,SqlSugar的使用需要預先建立一個SqlSugarClient物件。SqlSugar在此基礎上添加了CRUD、實體資訊維護(對映關係)、配置(AOP/過濾器等)、模式(DbFirst、CodeFirst)還有一些工具類等。可以看到這是一個簡而全的框架。
同時,SqlSugar也為查詢進行了進一步的擴充套件,以下是它支援的功能,以及在查詢上的增強:
![查詢](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200522180736313-2126485133.png)
好了,廢話不多說,先來試一下如何使用吧。
# 1. 安裝
本節環境是dotnet + vscode。因為我的Rider過期了,懶得折騰。系統又是Linux,所以選擇這種方式。至於Visual Studio和Rider的操作,十分簡單,而且之前《C#基礎系列16》裡有過介紹。
先建一個解決方案,名字為DataProvider:
```bash
dotnet new sln --name DataProvider
```
然後建立一個SqlSugarDemo的控制檯專案:
```bash
dotnet new console --name SqlSugarDemo
```
將這個專案新增到解決方案裡:(這一步為了方便後續管理)
```bash
dotnet sln add SqlSugarDemo
```
然後準備安裝 `sqlSugarCore` 。SqlSugar有兩個版本,這裡使用的是sqlSugarCore,這是針對.net core支援的版本。另一個是sqlSugar,是基於.netframework 4.X的。我們的系列是.net core的,所以就使用sqlSugarCore。
因為我們只是給專案`SqlSugarDemo`新增這個包,而不是給整個解決方案新增,所以我們需要預先切換目錄到SqlSugarDemo裡:
```bash
cd SqlSugarDemo/
```
然後使用命令列安裝 sqlSugarCore:
```bash
dotnet add package sqlSugarCore
```
或者使用 NuGet:
```powershell
Install-Package sqlSugarCore
```
過一會就可以在控制檯中看到安裝成功的訊息:
```b
log : Restore completed in XX sec for XXXXXX/SqlSugarDemo/SqlSugarDemo.csproj.
```
# 2. 基本使用示例
在上一節中,我們成功在專案中安裝了sqlSugarCore,那麼在這一節中將帶領小夥伴們一起探索SqlSugar。
先建立一個普通的模型:
```c#
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
```
建立一個操作類,取名為 DefaultContext,根據給出的文件得知,SqlSugar每次操作資料的時候需要持有一個 SqlSugarClient物件。所以,這個類的定義應該如下:
```c#
public class DefaultContext
{
public SqlSugarClient Client { get; }
public DefaultContext(string connectionString, DbType dbType)
{
Client = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = connectionString,//"Data Source=./demo.db",
DbType = dbType,
IsAutoCloseConnection = true,
});
}
}
```
- ConnectionString :連線字串
- DbType:資料庫型別,共有以下幾個值
- MySql
- SqlServer
- Sqlite
- Oracle
- PostgreSQL
- IsAutoCloseConnection:是否自動關閉連線,推薦true,預設為false。預設情況下,需要手動釋放
然後測試插入:
```c#
var context = new DefaultContext("Data Source=./demo.db", DbType.Sqlite);
context.Client.In