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 適用於以下場景:

  1. 中小型項目: 快速開發數據庫交互模塊。
  2. 動態表結構管理: 需要動態生成或切換表。
  3. 性能要求高的場景: 適合對 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 非常適合以下場景:

  1. 快速開發: 適用於中小型項目,降低了數據庫操作門檻。
  2. 複雜查詢優化: 在需要動態查詢或表名動態化的場景下表現出色。
  3. 多數據庫項目: 支持多種主流數據庫的無縫切換。