SQLSugar 是一個高效、易用的 .NET ORM 框架,支持多種數據庫(如 SQL Server、MySQL、PostgreSQL 等)。它提供了豐富的功能,包括 CRUD 操作、事務管理、動態表名、多表聯查等,開發者可以通過簡單的鏈式操作實現複雜的數據庫邏輯。
本文將以完整的示例,詳細介紹 SQLSugar 的安裝、配置和功能使用,適用於 .NET Framework 和 .NET Core 項目。
一、SQLSugar簡介
1. 什麼是 SQLSugar?
SQLSugar 是一個輕量級的開源 ORM 框架,專注於以下核心功能:
- 簡單易用: 通過鏈式操作簡化常見數據庫操作。
- 高性能: 優化底層 SQL 執行效率。
- 多數據庫支持: 兼容 SQL Server、MySQL、SQLite、PostgreSQL、Oracle 等。
- 功能全面: 支持事務、動態表名、分頁、多表聯查等高級特性。
2. 使用場景
SQLSugar 適用於以下場景:
- 中小型項目: 快速開發數據庫交互模塊。
- 動態表結構管理: 需要動態生成或切換表。
- 性能要求高的場景: 適合對 SQL 性能優化有需求的開發者。
二、SQLSugar 的安裝
SQLSugar 提供統一的 NuGet 包,無論是 .NET Framework 還是 .NET Core 項目,都直接使用 SqlSugar。
1. 在 .NET Framework 4.6+ 環境安裝 SqlSugar
- 使用 NuGet 包管理器安裝
打開 Visual Studio,在項目中右鍵選擇“管理 NuGet 程序包”,搜索 SqlSugar 並安裝。
注意事項:確保您的項目使用 .NET Framework 4.6 或更高版本,並在 App.config 或 Web.config 文件中正確配置數據庫連接字符串。 - 使用 Package Manager Console 安裝
在 Visual Studio 的工具菜單中打開 Package Manager Console,輸入以下命令:
Install-Package SqlSugar
- 使用 .NET CLI 安裝
在命令行中運行:
dotnet add package SqlSugar
注意: 即使您使用 .NET CLI 安裝,SqlSugar 包也完全兼容 .NET Framework 4.6+ 環境。
2. 在 .NET Core 和 .NET 5/6/7/8/9 環境安裝 SqlSugarCore
對於基於 .NET Core 和 .NET 5+(包括 .NET 6/7/8/9)的項目,應安裝專門的 SqlSugarCore 包。
- 使用 NuGet 包管理器安裝
打開 Visual Studio,在項目中右鍵選擇“管理 NuGet 程序包”,搜索 SqlSugarCore並安裝。 - 使用 Package Manager Console 安裝
在 Visual Studio 的工具菜單中打開 Package Manager Console,輸入以下命令:
Install-Package SqlSugarCore
- 使用 .NET CLI 安裝
在命令行中運行:
dotnet add package SqlSugarCore
注意事項:
- SqlSugarCore 是專門為 .NET Core 和 .NET 5/6/7/8/9 構建的輕量級包。
- 確保項目的運行時環境與目標框架一致。
三、SQLSugar 的基本使用教程
1. 數據庫上下文配置
創建數據庫上下文類
在 SQLSugar 中,通過 SqlSugarClient 管理與數據庫的連接。以下示例展示如何創建一個簡單的 DbContext 類:
using SqlSugar;
public class DbContext
{
public SqlSugarClient Db { get; }
public DbContext()
{
Db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "Server=localhost;Database=TestDB;User Id=sa;Password=your_password;",
DbType = DbType.SqlServer, // 數據庫類型
IsAutoCloseConnection = true, // 自動關閉連接
InitKeyType = InitKeyType.Attribute // 從實體類的特性初始化表結構
});
// 打印SQL到控制枱(僅在調試時使用)
Db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine($"SQL: {sql}");
};
}
}
2. 實體類定義
SQLSugar 支持通過特性映射數據庫表和字段。以下示例定義了一個簡單的用户表實體類:
using SqlSugar;
[SugarTable("Users")] // 指定數據庫表名為 "Users"
public class User
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)] // 主鍵且自增
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
3. 數據庫基本操作
以下是使用 SQLSugar 進行增刪改查的示例:
插入數據
var db = new DbContext().Db;
// 插入單條記錄
var user = new User { Name = "Alice", Age = 25 };
db.Insertable(user).ExecuteCommand();
// 插入多條記錄
var users = new List<User>
{
new User { Name = "Bob", Age = 30 },
new User { Name = "Charlie", Age = 28 }
};
db.Insertable(users).ExecuteCommand();
查詢數據
// 查詢單條記錄
var user = db.Queryable<User>().First(u => u.Id == 1);
// 條件查詢多條記錄
var users = db.Queryable<User>().Where(u => u.Age > 20).ToList();
// 動態條件查詢
int ageFilter = 25;
var filteredUsers = db.Queryable<User>()
.WhereIF(ageFilter > 0, u => u.Age > ageFilter)
.ToList();
更新數據
// 更新單條記錄
var user = new User { Id = 1, Name = "Alice Updated", Age = 26 };
db.Updateable(user).ExecuteCommand();
// 條件更新
db.Updateable<User>()
.SetColumns(u => u.Age == u.Age + 1)
.Where(u => u.Age < 30)
.ExecuteCommand();
刪除數據
// 按主鍵刪除
db.Deleteable<User>().In(1).ExecuteCommand();
// 條件刪除
db.Deleteable<User>().Where(u => u.Age > 50).ExecuteCommand();
4. 高級功能
事務管理
SQLSugar 提供了簡單的事務管理功能,適合多操作的場景:
var db = new DbContext().Db;
db.Ado.UseTran(() =>
{
db.Insertable(new User { Name = "Transaction Test", Age = 20 }).ExecuteCommand();
db.Updateable<User>().SetColumns(u => u.Age == 30).Where(u => u.Name == "Transaction Test").ExecuteCommand();
});
動態表名
通過 AS 方法可以動態指定表名:
var tableName = "Users_2024";
var users = db.Queryable<User>().AS(tableName).ToList();
分頁查詢
SQLSugar 提供了便捷的分頁查詢方法:
int totalCount;
var pagedUsers = db.Queryable<User>()
.OrderBy(u => u.Id)
.ToPageList(1, 10, out totalCount); // 第1頁,每頁10條
Console.WriteLine($"Total Count: {totalCount}");
四、總結
1. 優點
- 易用性: 鏈式操作降低了開發複雜度。
- 性能優化: 支持多數據庫,底層 SQL 執行效率高。
- 功能齊全: 事務管理、動態表名、多表聯查等功能一應俱全。
- 跨平台支持: 兼容 .NET Framework 和 .NET Core。
2. 使用建議
SQLSugar 非常適合以下場景:
- 快速開發: 適用於中小型項目,降低了數據庫操作門檻。
- 複雜查詢優化: 在需要動態查詢或表名動態化的場景下表現出色。
- 多數據庫項目: 支持多種主流數據庫的無縫切換。