最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQLSugar簡(jiǎn)介、使用方法、核心類與 API 及示例演示

 更新時(shí)間:2025年12月09日 10:25:38   作者:張謹(jǐn)?shù)W  
SQLSugar以高性能、易上手、功能全為核心優(yōu)勢(shì),通過(guò)簡(jiǎn)潔的API簡(jiǎn)化了.NET 項(xiàng)目的數(shù)據(jù)庫(kù)操作,本文介紹SQLSugar簡(jiǎn)介、使用方法、核心類與 API 及示例,感興趣的朋友跟隨小編一起看看吧

一、SQLSugar 簡(jiǎn)介

SQLSugar 是一款 輕量級(jí)、高性能的 .NET ORM 框架,由國(guó)內(nèi)團(tuán)隊(duì)開發(fā)維護(hù),專注于簡(jiǎn)化數(shù)據(jù)庫(kù)操作,同時(shí)兼顧靈活性與性能。它通過(guò)對(duì)象關(guān)系映射(ORM)將 C# 實(shí)體類與數(shù)據(jù)庫(kù)表關(guān)聯(lián),允許開發(fā)者以面向?qū)ο蟮姆绞酵瓿?CRUD、查詢、事務(wù)等操作,無(wú)需編寫原生 SQL(或僅需少量 SQL)。

核心特點(diǎn):

  • 多數(shù)據(jù)庫(kù)支持:兼容 SQL Server、MySQL、Oracle、PostgreSQL、SQLite、達(dá)夢(mèng)等主流數(shù)據(jù)庫(kù),切換數(shù)據(jù)庫(kù)只需修改配置。
  • 高性能:采用編譯緩存、SQL 優(yōu)化等機(jī)制,性能接近原生 ADO.NET,遠(yuǎn)超多數(shù)同類 ORM。
  • 易用性:API 設(shè)計(jì)簡(jiǎn)潔,支持鏈?zhǔn)讲樵儯ㄈ?Queryable<T>().Where().OrderBy()),學(xué)習(xí)成本低。
  • 功能全面:支持分表分庫(kù)、導(dǎo)航屬性(多表關(guān)聯(lián))、批量操作、事務(wù)、數(shù)據(jù)庫(kù)遷移(CodeFirst)等高級(jí)特性。
  • 輕量無(wú)依賴:核心庫(kù)體積僅幾百 KB,可無(wú)縫集成到 .NET Framework、.NET Core、.NET 5+ 等項(xiàng)目中。

二、基本使用方法

2.1 安裝

通過(guò) NuGet 安裝核心包:

Install-Package SqlSugarCore  # .NET Core/.NET 5+
# 或針對(duì)特定數(shù)據(jù)庫(kù)安裝擴(kuò)展包(如MySQL)
Install-Package MySqlConnector  # MySQL驅(qū)動(dòng)

2.2 初始化數(shù)據(jù)庫(kù)連接

使用 SqlSugarClientSqlSugarScope 初始化連接(核心是 ConnectionConfig 配置):

using SqlSugar;
using System;
?
// 1. 定義連接配置
var config = new ConnectionConfig
{
    ConnectionString = "Server=.;Database=TestDB;Uid=sa;Pwd=123456;", // 連接字符串
    DbType = DbType.SqlServer, // 數(shù)據(jù)庫(kù)類型(如DbType.MySql)
    IsAutoCloseConnection = true, // 自動(dòng)關(guān)閉連接(推薦開啟)
    InitKeyType = InitKeyType.Attribute // 從實(shí)體特性讀取主鍵/自增配置
};
?
// 2. 初始化客戶端(二選一)
// 方式1:SqlSugarClient(非線程安全,每次操作new實(shí)例或通過(guò)IOC注入Scope)
var db = new SqlSugarClient(config);
?
// 方式2:SqlSugarScope(線程安全,適合單例模式,如ASP.NET Core注入)
// var db = new SqlSugarScope(config);

2.3 核心操作流程

  • 定義實(shí)體類(映射數(shù)據(jù)庫(kù)表);
  • 通過(guò)客戶端對(duì)象(db) 調(diào)用 API 執(zhí)行數(shù)據(jù)庫(kù)操作(CRUD、查詢等)。

三、關(guān)鍵類與作用

類 / 接口作用說(shuō)明核心場(chǎng)景
SqlSugarClient數(shù)據(jù)庫(kù)操作核心類,提供所有 ORM API非單例場(chǎng)景(如 WinForm),每次操作 new 實(shí)例
SqlSugarScope線程安全的客戶端類(基于 AsyncLocal 實(shí)現(xiàn))單例場(chǎng)景(如ASP.NET Core),全局共享實(shí)例
ISqlSugarClient客戶端接口,用于依賴注入(解耦)項(xiàng)目中通過(guò)接口調(diào)用,便于測(cè)試和替換
ConnectionConfig連接配置類,存儲(chǔ)數(shù)據(jù)庫(kù)連接信息初始化客戶端時(shí)必傳,配置連接字符串、數(shù)據(jù)庫(kù)類型等
SugarTable類級(jí)別特性,指定實(shí)體對(duì)應(yīng)的數(shù)據(jù)表名實(shí)體類定義時(shí),映射表名(如[SugarTable("Users")]
SugarColumn屬性級(jí)別特性,配置字段屬性(主鍵、長(zhǎng)度等)實(shí)體屬性定義時(shí),指定字段名、自增、默認(rèn)值等

四、關(guān)鍵 API 與示例

4.1 實(shí)體類定義(基于特性)

先定義與數(shù)據(jù)庫(kù)表映射的實(shí)體類(以 “用戶表” 為例):

using SqlSugar;
using System;
?
// 映射到數(shù)據(jù)庫(kù)表:Sys_User
[SugarTable("Sys_User")]
public class User
{
    // 主鍵(自增)
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
?
    // 用戶名(字段名:User_Name,長(zhǎng)度50,非空)
    [SugarColumn(ColumnName = "User_Name", Length = 50, IsNullable = false)]
    public string UserName { get; set; }
?
    // 密碼(字段名:User_Pwd,加密存儲(chǔ))
    [SugarColumn(ColumnName = "User_Pwd", Length = 100)]
    public string Password { get; set; }
?
    // 年齡(默認(rèn)值0)
    [SugarColumn(DefaultValue = "0")]
    public int Age { get; set; }
?
    // 注冊(cè)時(shí)間(默認(rèn)值:當(dāng)前時(shí)間)
    [SugarColumn(ColumnName = "Reg_Time", DefaultValue = "GETDATE()")]
    public DateTime RegTime { get; set; }
?
    // 忽略字段(不映射到數(shù)據(jù)庫(kù))
    [SugarColumn(IsIgnore = true)]
    public string TempData { get; set; }
}

4.2 CRUD 核心 API

1. 新增(Insert)

// 單條新增
var user = new User 
{ 
    UserName = "張三", 
    Password = "123456", 
    Age = 25 
};
// 執(zhí)行新增并返回自增ID
int newId = db.Insertable(user).ExecuteReturnIdentity(); 
?
// 批量新增(性能優(yōu)于循環(huán)單條插入)
var userList = new List<User>
{
    new User{ UserName = "李四", Password = "654321", Age = 30 },
    new User{ UserName = "王五", Password = "abc123", Age = 28 }
};
bool isSuccess = db.Insertable(userList).ExecuteCommand() > 0; // 返回影響行數(shù)

2. 查詢(Query)

// 2.1 單條查詢(根據(jù)條件)
User user = db.Queryable<User>()
              .Where(u => u.UserName == "張三") // 條件
              .First(); // 返回第一條
?
// 2.2 列表查詢(帶排序)
List<User> users = db.Queryable<User>()
                     .Where(u => u.Age > 25) // 年齡>25
                     .OrderBy(u => u.RegTime, OrderByType.Desc) // 按注冊(cè)時(shí)間倒序
                     .ToList(); // 返回列表
?
// 2.3 分頁(yè)查詢(第2頁(yè),每頁(yè)10條)
int pageIndex = 2;
int pageSize = 10;
var pageResult = db.Queryable<User>()
                   .ToPageList(pageIndex, pageSize, out int totalCount); 
// totalCount:總記錄數(shù)(用于分頁(yè)控件)
?
// 2.4 聚合查詢(統(tǒng)計(jì)、求和等)
int total = db.Queryable<User>().Count(); // 總記錄數(shù)
int maxAge = db.Queryable<User>().Max(u => u.Age); // 最大年齡
decimal avgAge = db.Queryable<User>().Average(u => u.Age); // 平均年齡

3. 更新(Update)

// 3.1 全量更新(根據(jù)主鍵)
user.Age = 26; // 修改年齡
bool updateSuccess = db.Updateable(user).ExecuteCommand() > 0;
?
// 3.2 局部更新(只更新指定字段,性能更優(yōu))
bool partialUpdate = db.Updateable<User>()
                       .SetColumns(u => u.Age == 27) // 只更新Age字段
                       .Where(u => u.UserName == "張三") // 條件
                       .ExecuteCommand() > 0;
4. 刪除(Delete)
// 4.1 根據(jù)實(shí)體刪除(根據(jù)主鍵)
bool deleteByEntity = db.Deleteable(user).ExecuteCommand() > 0;
?
// 4.2 根據(jù)條件刪除
bool deleteByWhere = db.Deleteable<User>()
                       .Where(u => u.Age < 18) // 刪除年齡<18的用戶
                       .ExecuteCommand() > 0;

4.3 高級(jí)查詢 API

1. 子查詢

// 查詢“注冊(cè)時(shí)間在最近30天”且“年齡>平均年齡”的用戶
var subQuery = db.Queryable<User>().Select(u => SqlFunc.AggregateAverage(u.Age)); // 子查詢:平均年齡
?
var result = db.Queryable<User>()
               .Where(u => u.RegTime >= DateTime.Now.AddDays(-30) 
                        && u.Age > subQuery) // 關(guān)聯(lián)子查詢
               .ToList();

2. 多表關(guān)聯(lián)查詢(導(dǎo)航屬性)

假設(shè)有訂單表(Order)與用戶表(User)關(guān)聯(lián)(一對(duì)多):

// 訂單實(shí)體(含導(dǎo)航屬性)
[SugarTable("Orders")]
public class Order
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    public int UserId { get; set; } // 外鍵(關(guān)聯(lián)User.Id)
    // 導(dǎo)航屬性:關(guān)聯(lián)用戶(一對(duì)一)
    [Navigate(NavigateType.OneToOne, nameof(UserId))] 
    public User User { get; set; } 
}
// 查詢訂單時(shí)同時(shí)加載關(guān)聯(lián)的用戶信息
var orders = db.Queryable<Order>()
               .Includes(o => o.User) // 加載導(dǎo)航屬性
               .Where(o => o.Id > 100)
               .ToList();
// 使用關(guān)聯(lián)數(shù)據(jù)
foreach (var order in orders)
{
    Console.WriteLine($"訂單ID:{order.Id},用戶名:{order.User.UserName}");
}

4.4 事務(wù)操作

try
{
    // 開啟事務(wù)
    db.Ado.BeginTran();
    // 執(zhí)行多個(gè)操作(新增用戶+新增訂單)
    var newUser = new User { UserName = "趙六", Password = "111", Age = 35 };
    int userId = db.Insertable(newUser).ExecuteReturnIdentity();
    var newOrder = new Order { UserId = userId, OrderNo = "ORD_123" };
    db.Insertable(newOrder).ExecuteCommand();
    // 提交事務(wù)
    db.Ado.CommitTran();
}
catch (Exception ex)
{
    // 回滾事務(wù)
    db.Ado.RollbackTran();
    Console.WriteLine($"事務(wù)失?。簕ex.Message}");
}

五、兩種客戶端模式對(duì)比(SqlSugarClient vs SqlSugarScope)

特性SqlSugarClientSqlSugarScope
線程安全非線程安全(禁止單例)線程安全(支持單例)
性能更高(每次 new 輕量對(duì)象)中上(內(nèi)部維護(hù)上下文)
適用場(chǎng)景WinForm、控制臺(tái)(非單例場(chǎng)景)ASP.NET Core(單例注入)
使用注意每次操作 new 實(shí)例或用db.CopyNew()全局單例,禁止重復(fù) new(內(nèi)存泄漏)

六、總結(jié)

SQLSugar 以 “高性能、易上手、功能全” 為核心優(yōu)勢(shì),通過(guò)簡(jiǎn)潔的 API 簡(jiǎn)化了 .NET 項(xiàng)目的數(shù)據(jù)庫(kù)操作。關(guān)鍵在于掌握 實(shí)體類定義(特性配置)、客戶端初始化CRUD / 查詢 API 的使用。無(wú)論是簡(jiǎn)單的單表操作還是復(fù)雜的多表關(guān)聯(lián)、事務(wù)處理,SQLSugar 都能提供高效的解決方案,適合從中小型項(xiàng)目到大型企業(yè)系統(tǒng)的各類場(chǎng)景。

到此這篇關(guān)于SQLSugar簡(jiǎn)介、使用方法、核心類與 API 及示例演示的文章就介紹到這了,更多相關(guān)SQLSugar使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 理解HttpHandler,并為所有*.jpg圖片生成一段文字于圖片上

    理解HttpHandler,并為所有*.jpg圖片生成一段文字于圖片上

    HttpHandler就是最終相應(yīng)HTTP請(qǐng)求,生成HTTP響應(yīng)的處理器,他們的實(shí)例由asp.net運(yùn)行時(shí)創(chuàng)建,,并生存在asp.net的運(yùn)行時(shí)環(huán)境中,如果asp.net運(yùn)行時(shí)是處理請(qǐng)求的工廠,HttpHandler是處理請(qǐng)求的工人
    2012-03-03
  • ASP.NET?Core響應(yīng)壓縮中間件的使用技巧分享

    ASP.NET?Core響應(yīng)壓縮中間件的使用技巧分享

    響應(yīng)壓縮中間件是ASP.NET?Core的一部分,它通過(guò)應(yīng)用支持的壓縮算法(如Gzip和Brotli)來(lái)減小服務(wù)器發(fā)送到客戶端的響應(yīng)體積,本文給大家介紹了ASP.NET?Core響應(yīng)壓縮中間件的使用技巧及避坑指南,需要的朋友可以參考下
    2025-07-07
  • ASP.NET?Core依賴注入(DI)講解

    ASP.NET?Core依賴注入(DI)講解

    本文詳細(xì)講解了ASP.NET?Core依賴注入(DI),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • asp.net各種cookie代碼和解析實(shí)例

    asp.net各種cookie代碼和解析實(shí)例

    這篇文章主要介紹了asp.net各種cookie代碼和解析實(shí)例,需要的朋友可以參考下
    2014-02-02
  • ASP.NET中的幾種彈出框提示基本實(shí)現(xiàn)方法

    ASP.NET中的幾種彈出框提示基本實(shí)現(xiàn)方法

    NET程序的開發(fā)過(guò)程中,常常需要和用戶進(jìn)行信息交互,對(duì)話框的出現(xiàn)將解決了這些問題,下面是本人對(duì)常用對(duì)話框使用的小結(jié),希望對(duì)大家有所幫助
    2013-03-03
  • 如何在 .NET 中使用 Flurl 高效處理Http請(qǐng)求

    如何在 .NET 中使用 Flurl 高效處理Http請(qǐng)求

    這篇文章主要介紹了如何在 .NET 中使用 Flurl 高效處理Http請(qǐng)求,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下
    2021-05-05
  • Entity Framework使用LINQ操作實(shí)體

    Entity Framework使用LINQ操作實(shí)體

    本文詳細(xì)講解了Entity Framework使用LINQ操作實(shí)體的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • ASP.NET Core中使用EPPlus導(dǎo)入出Excel文件的完整步驟

    ASP.NET Core中使用EPPlus導(dǎo)入出Excel文件的完整步驟

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何使用EPPlus導(dǎo)入出Excel文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • .NetCore獲取Json和Xml格式的配置信息

    .NetCore獲取Json和Xml格式的配置信息

    本篇將和大家分享的是如何獲取Json和Xml格式的配置信息,主要介紹的是Configuration擴(kuò)展方法的使用,對(duì).netcore 獲取json和xml格式的配置信息的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2017-09-09
  • 詳解ASP.NET WEB API 之屬性路由

    詳解ASP.NET WEB API 之屬性路由

    本篇文章主要介紹了ASP.NET WEB API 之屬性路由,路由就是Web API如何把URI匹配到一個(gè)Action的描述。有興趣的可以了解一下。
    2017-03-03

最新評(píng)論

历史| 睢宁县| 绥中县| 抚州市| 卫辉市| 石林| 渑池县| 泰兴市| 凌海市| 兰考县| 鹤峰县| 比如县| 砚山县| 泰宁县| 广西| 尉氏县| 灵石县| 吕梁市| 通江县| 东乌珠穆沁旗| 开平市| 兴山县| 赫章县| 荣昌县| 长垣县| 浪卡子县| 大余县| 邛崃市| 高雄县| 商洛市| 浑源县| 清流县| 株洲市| 尼木县| 嘉义市| 伊川县| 江安县| 青浦区| 金堂县| 沙坪坝区| 盐池县|