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

.NET中SqlSugar使用教程小結(jié)

 更新時間:2026年04月02日 08:50:17   作者:青塵  
SqlSugar是是一款基于.NET的高性能ORM框架,支持多數(shù)據(jù)庫操作,支持CodeFirst/DbFirst,本文就來詳細的介紹一下SqlSugar使用,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧

SqlSugar 是一款 .NET 生態(tài)下開源免費、高性能、低代碼、開箱即用的 ORM 框架,MIT 開源協(xié)議,性能接近原生 ADO.NET,支持多數(shù)據(jù)庫兼容,是 .NET 開發(fā)中最主流的 ORM 之一。

本教程基于 SqlSugar 5.X 最新穩(wěn)定版編寫,覆蓋從入門安裝到進階實戰(zhàn)的全流程,適配 .NET Core 3.1 / .NET 5+ 及以上版本(.NET Framework 需使用 SqlSugar 非 Core 版本)。

一、環(huán)境準備與安裝

1. 支持范圍

  • 框架支持:.NET Core 3.1、.NET 5/6/7/8/9/10、.NET Framework 4.0+
  • 數(shù)據(jù)庫支持:SQL Server、MySQL、PostgreSQL、Oracle、SQLite、達夢、人大金倉等主流數(shù)據(jù)庫
  • 核心包區(qū)分
    • .NET Core/.NET 5+ :SqlSugarCore(推薦,持續(xù)更新維護)
    • .NET Framework :SqlSugar

2. 安裝方式

方式1:NuGet 包管理器(Visual Studio/Rider)

在 NuGet 包管理界面搜索 SqlSugarCore,點擊安裝對應(yīng)穩(wěn)定版即可。

方式2:命令行安裝

# .NET CLI 命令(推薦)
dotnet add package SqlSugarCore
# Package Manager 命令
Install-Package SqlSugarCore

二、核心對象初始化

SqlSugar 的所有數(shù)據(jù)庫操作都圍繞 SqlSugarClient 核心對象展開,初始化僅需配置 ConnectionConfig 連接配置即可。

1. 基礎(chǔ)初始化(控制臺/單例場景)

核心配置項說明:

配置項作用推薦值
ConnectionString數(shù)據(jù)庫連接字符串按對應(yīng)數(shù)據(jù)庫格式填寫
DbType數(shù)據(jù)庫類型枚舉對應(yīng)數(shù)據(jù)庫類型(如 DbType.MySql)
IsAutoCloseConnection自動關(guān)閉連接必須設(shè)為 true,避免連接泄露
InitKeyType主鍵識別方式InitKeyType.Attribute(通過特性指定主鍵,更穩(wěn)定)
using SqlSugar;
// 1. 構(gòu)建連接配置
var connectionConfig = new ConnectionConfig()
{
    ConnectionString = "Server=localhost;Database=TestDB;Uid=root;Pwd=123456;", // MySQL示例
    // SQL Server示例:"Server=.;Database=TestDB;Uid=sa;Pwd=123456;TrustServerCertificate=True;"
    DbType = DbType.MySql,
    IsAutoCloseConnection = true,
    InitKeyType = InitKeyType.Attribute
};
// 2. 創(chuàng)建核心客戶端對象
var db = new SqlSugarClient(connectionConfig);
// 3. 可選:配置SQL日志(調(diào)試必備,可查看生成的SQL語句)
db.Aop.OnLogExecuting = (sql, pars) =>
{
    Console.WriteLine($"【生成SQL】{sql}");
    Console.WriteLine($"【參數(shù)】{string.Join(",", pars.Select(p => $"{p.ParameterName}={p.Value}"))}");
};
// 4. 測試數(shù)據(jù)庫連接
var isConnected = db.Ado.IsValidConnection();
Console.WriteLine(isConnected ? "數(shù)據(jù)庫連接成功" : "數(shù)據(jù)庫連接失敗");

2. 全局單例模式(推薦)

SqlSugarClient 是線程安全的,強烈建議全局單例初始化,避免頻繁創(chuàng)建銷毀對象帶來的性能損耗。

/// <summary>
/// SqlSugar 單例上下文
/// </summary>
public static class SqlSugarContext
{
    // 全局唯一實例
    public static readonly SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
    {
        ConnectionString = "你的數(shù)據(jù)庫連接字符串",
        DbType = DbType.MySql,
        IsAutoCloseConnection = true,
        InitKeyType = InitKeyType.Attribute
    },
    // 全局配置AOP
    db =>
    {
        // 全局SQL日志
        db.Aop.OnLogExecuting = (sql, pars) =>
        {
            Console.WriteLine($"SQL:{sql}\r\n參數(shù):{string.Join(",", pars.Select(p => $"{p.ParameterName}={p.Value}"))}");
        };
    });
}
// 使用方式
var list = SqlSugarContext.Db.Queryable<User>().ToList();

3. ASP.NET Core 依賴注入(Web項目推薦)

Program.cs 中注入服務(wù),支持 Scope/單例 兩種生命周期:

var builder = WebApplication.CreateBuilder(args);
// 讀取配置文件中的連接字符串
var connectionString = builder.Configuration.GetConnectionString("Default");
// 注入SqlSugar客戶端(Scope模式,推薦Web項目使用)
builder.Services.AddScoped<ISqlSugarClient>(sp =>
{
    return new SqlSugarClient(new ConnectionConfig()
    {
        ConnectionString = connectionString,
        DbType = DbType.MySql,
        IsAutoCloseConnection = true,
        InitKeyType = InitKeyType.Attribute
    });
});
// 單例模式注入
// builder.Services.AddSingleton<ISqlSugarClient>(...);
var app = builder.Build();
app.Run();

配置文件 appsettings.json 中添加連接字符串:

{
  "ConnectionStrings": {
    "Default": "Server=localhost;Database=TestDB;Uid=root;Pwd=123456;"
  }
}

三、實體映射與表結(jié)構(gòu)管理

SqlSugar 支持 CodeFirst(代碼優(yōu)先,實體生成表)DbFirst(數(shù)據(jù)庫優(yōu)先,表生成實體) 兩種模式,通過特性完成實體與表/字段的精準映射。

1. 實體映射特性詳解

核心特性分為類級別的 SugarTable 和屬性級別的 SugarColumn,常用參數(shù)如下:

using SqlSugar;
/// <summary>
/// 用戶實體類 示例
/// </summary>
[SugarTable("sys_user")] // 指定數(shù)據(jù)庫表名,不填則默認使用類名作為表名
public class User
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "user_id")]
    // 主鍵、自增、映射數(shù)據(jù)庫字段名user_id
    public int UserId { get; set; }
    [SugarColumn(ColumnName = "user_name", Length = 50, IsNullable = false)]
    // 字段名映射、長度50、非空
    public string UserName { get; set; }
    [SugarColumn(ColumnName = "user_age", DefaultValue = "18")]
    // 默認值18
    public int Age { get; set; }
    [SugarColumn(ColumnName = "create_time", DefaultValue = "NOW()", IsOnlyIgnoreInsert = true)]
    // 默認值為當前時間,插入時忽略該字段(由數(shù)據(jù)庫生成)
    public DateTime CreateTime { get; set; }
    [SugarColumn(IsIgnore = true)]
    // 忽略該字段,不映射到數(shù)據(jù)庫表
    public string TempData { get; set; }
    [SugarColumn(IsNullable = true, Length = 100)]
    public string Email { get; set; }
}

2. CodeFirst 代碼優(yōu)先(實體生成表)

無需手動寫建表SQL,通過實體類自動生成/同步數(shù)據(jù)庫表結(jié)構(gòu),適合新項目開發(fā)。

// 1. 單個實體生成表(表不存在則創(chuàng)建,存在則同步字段變更)
SqlSugarContext.Db.CodeFirst.InitTables<User>();
// 2. 批量多個實體生成表
SqlSugarContext.Db.CodeFirst.InitTables(typeof(User), typeof(Order), typeof(OrderItem));
// 3. 高級配置:自定義表結(jié)構(gòu)
SqlSugarContext.Db.CodeFirst
    .ConfigTable<User>(t => t.TableName = "sys_user") // 自定義表名
    .ConfigColumn<User>(c =>
    {
        if (c.PropertyName == nameof(User.UserName))
        {
            c.Length = 100; // 自定義字段長度
            c.IsNullable = false; // 非空
        }
    })
    .InitTables<User>();

3. DbFirst 數(shù)據(jù)庫優(yōu)先(表生成實體)

已有數(shù)據(jù)庫表時,一鍵生成對應(yīng)的實體類,無需手動編寫。

// 1. 生成所有表的實體類到指定路徑
SqlSugarContext.Db.DbFirst
    .CreateClassFile(@"D:\Project\Models\", "YourProject.Models"); // 路徑、命名空間
// 2. 生成指定表的實體類
SqlSugarContext.Db.DbFirst
    .Where("sys_user,sys_order") // 指定表名,多個用逗號分隔
    .CreateClassFile(@"D:\Project\Models\", "YourProject.Models");
// 3. 生成時添加默認特性
SqlSugarContext.Db.DbFirst
    .IsCreateAttribute() // 自動生成SugarTable/SugarColumn特性
    .CreateClassFile(@"D:\Project\Models\", "YourProject.Models");

四、核心 CRUD 操作

SqlSugar 采用鏈式API設(shè)計,語法簡潔直觀,支持同步+異步雙模式(Web項目推薦優(yōu)先使用異步方法),覆蓋99%的業(yè)務(wù)場景。

以下示例均使用 SqlSugarContext.Db 單例對象,實體以 User 為例。

1. 新增操作(Insert)

#region 同步方法
// 1. 單條新增
var user = new User() { UserName = "張三", Age = 20, Email = "zhangsan@test.com" };
int rows = SqlSugarContext.Db.Insertable(user).ExecuteCommand(); // 返回受影響行數(shù)
// 2. 單條新增并返回自增主鍵ID(自增主鍵專用)
int newUserId = SqlSugarContext.Db.Insertable(user).ExecuteReturnIdentity();
// 3. 批量新增(性能遠高于循環(huán)單條插入)
var userList = new List<User>()
{
    new User(){ UserName = "李四", Age = 22, Email = "lisi@test.com" },
    new User(){ UserName = "王五", Age = 25, Email = "wangwu@test.com" }
};
int batchRows = SqlSugarContext.Db.Insertable(userList).ExecuteCommand();
// 4. 大數(shù)據(jù)批量插入(10萬+數(shù)據(jù),BulkCopy模式,性能拉滿)
SqlSugarContext.Db.Fastest<User>().BulkCopy(userList);
// 5. 忽略指定字段插入
SqlSugarContext.Db.Insertable(user)
    .IgnoreColumns(u => u.CreateTime) // 忽略CreateTime字段
    .ExecuteCommand();
// 6. 僅插入指定字段
SqlSugarContext.Db.Insertable(user)
    .InsertColumns(u => new { u.UserName, u.Age }) // 僅插入UserName和Age
    .ExecuteCommand();
#endregion
#region 異步方法(推薦)
// 常用異步示例
int asyncRows = await SqlSugarContext.Db.Insertable(user).ExecuteCommandAsync();
int asyncNewId = await SqlSugarContext.Db.Insertable(user).ExecuteReturnIdentityAsync();
int asyncBatchRows = await SqlSugarContext.Db.Insertable(userList).ExecuteCommandAsync();
#endregion

2. 查詢操作(Query)

查詢是業(yè)務(wù)中最常用的操作,SqlSugar 提供 Queryable 鏈式查詢對象,支持復雜條件、聚合、排序等操作。

#region 基礎(chǔ)查詢
// 1. 查詢表所有數(shù)據(jù)
var allUser = SqlSugarContext.Db.Queryable<User>().ToList();
// 2. 按主鍵查詢單條數(shù)據(jù)
var userById = SqlSugarContext.Db.Queryable<User>().InSingle(1); // 主鍵=1
// 3. 條件查詢列表
var userByWhere = SqlSugarContext.Db.Queryable<User>()
    .Where(u => u.Age > 18 && u.UserName.Contains("張")) // 年齡>18 且 用戶名包含"張"
    .ToList();
// 4. 單條條件查詢(無數(shù)據(jù)返回null)
var userFirst = SqlSugarContext.Db.Queryable<User>()
    .Where(u => u.UserName == "張三")
    .First();
// 5. 查詢指定字段(避免select *)
var userSelect = SqlSugarContext.Db.Queryable<User>()
    .Select(u => new { u.UserId, u.UserName, u.Age }) // 匿名對象
    .ToList();
// 6. 排序查詢
var userOrder = SqlSugarContext.Db.Queryable<User>()
    .OrderBy(u => u.CreateTime, OrderByType.Desc) // 按創(chuàng)建時間倒序
    .OrderBy(u => u.Age, OrderByType.Asc) // 再按年齡正序
    .ToList();
// 7. 分頁查詢(業(yè)務(wù)高頻使用)
int pageIndex = 1; // 頁碼
int pageSize = 10; // 每頁條數(shù)
int totalCount = 0; // 總條數(shù)
var pageList = SqlSugarContext.Db.Queryable<User>()
    .Where(u => u.Age > 18)
    .ToPageList(pageIndex, pageSize, ref totalCount);
Console.WriteLine($"總條數(shù):{totalCount},總頁數(shù):{Math.Ceiling((double)totalCount / pageSize)}");
#endregion
#region 聚合查詢
// 統(tǒng)計總數(shù)
int count = SqlSugarContext.Db.Queryable<User>().Count(u => u.Age > 18);
// 最大值
int maxAge = SqlSugarContext.Db.Queryable<User>().Max(u => u.Age);
// 最小值
int minAge = SqlSugarContext.Db.Queryable<User>().Min(u => u.Age);
// 平均值
double avgAge = SqlSugarContext.Db.Queryable<User>().Avg(u => u.Age);
// 求和
int sumAge = SqlSugarContext.Db.Queryable<User>().Sum(u => u.Age);
// 判斷是否存在
bool isExist = SqlSugarContext.Db.Queryable<User>().Any(u => u.UserName == "張三");
#endregion
#region 異步方法
var allUserAsync = await SqlSugarContext.Db.Queryable<User>().ToListAsync();
var countAsync = await SqlSugarContext.Db.Queryable<User>().CountAsync();
var pageListAsync = await SqlSugarContext.Db.Queryable<User>().ToPageListAsync(pageIndex, pageSize, totalCount);
#endregion

3. 更新操作(Update)

#region 同步方法
// 1. 全實體更新(根據(jù)主鍵更新,推薦先查詢再更新)
var updateUser = SqlSugarContext.Db.Queryable<User>().InSingle(1);
updateUser.UserName = "張三修改";
updateUser.Age = 30;
int updateRows = SqlSugarContext.Db.Updateable(updateUser).ExecuteCommand();
// 2. 僅更新指定字段(推薦,避免全字段更新)
SqlSugarContext.Db.Updateable<User>()
    .SetColumns(u => u.UserName == "張三修改")
    .SetColumns(u => u.Age == 30)
    .Where(u => u.UserId == 1)
    .ExecuteCommand();
// 3. 實體指定字段更新
SqlSugarContext.Db.Updateable(updateUser)
    .UpdateColumns(u => new { u.UserName, u.Age }) // 僅更新這兩個字段
    .ExecuteCommand();
// 4. 條件批量更新(年齡<18的用戶,年齡+1)
SqlSugarContext.Db.Updateable<User>()
    .SetColumns(u => new User() { Age = u.Age + 1 })
    .Where(u => u.Age < 18)
    .ExecuteCommand();
// 5. 批量更新
var updateList = new List<User>()
{
    new User(){ UserId = 1, UserName = "張三", Age = 20 },
    new User(){ UserId = 2, UserName = "李四", Age = 21 }
};
SqlSugarContext.Db.Updateable(updateList).ExecuteCommand();
// 6. 忽略指定字段更新
SqlSugarContext.Db.Updateable(updateUser)
    .IgnoreColumns(u => u.CreateTime) // 忽略CreateTime字段不更新
    .ExecuteCommand();
#endregion
#region 異步方法
int asyncUpdateRows = await SqlSugarContext.Db.Updateable(updateUser).ExecuteCommandAsync();
#endregion

4. 刪除操作(Delete)

注意:物理刪除需謹慎,生產(chǎn)環(huán)境推薦使用軟刪除(邏輯刪除),通過更新字段標記刪除狀態(tài)。

#region 同步方法
// 1. 按主鍵刪除
int deleteRows = SqlSugarContext.Db.Deleteable<User>().In(1).ExecuteCommand();
// 2. 批量主鍵刪除
SqlSugarContext.Db.Deleteable<User>().In(new int[] { 1, 2, 3 }).ExecuteCommand();
// 3. 條件刪除
SqlSugarContext.Db.Deleteable<User>()
    .Where(u => u.Age < 18)
    .ExecuteCommand();
// 4. 實體刪除(根據(jù)主鍵)
var deleteUser = SqlSugarContext.Db.Queryable<User>().InSingle(1);
SqlSugarContext.Db.Deleteable(deleteUser).ExecuteCommand();
#endregion
#region 異步方法
int asyncDeleteRows = await SqlSugarContext.Db.Deleteable<User>().In(1).ExecuteCommandAsync();
#endregion

五、進階實戰(zhàn)用法

1. 多表聯(lián)查

SqlSugar 提供極簡的聯(lián)表語法,支持 LeftJoin、InnerJoin、RightJoin,最多支持16表聯(lián)查。

// 示例:訂單表 左聯(lián) 用戶表 左聯(lián) 訂單明細表
// 定義關(guān)聯(lián)實體
[SugarTable("sys_order")]
public class Order
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int OrderId { get; set; }
    public int UserId { get; set; }
    public string OrderNo { get; set; }
    public decimal TotalAmount { get; set; }
    public DateTime CreateTime { get; set; }
}
[SugarTable("sys_order_item")]
public class OrderItem
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int ItemId { get; set; }
    public int OrderId { get; set; }
    public string ProductName { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
}
// 2表聯(lián)查:查詢訂單及對應(yīng)用戶信息
var orderList = SqlSugarContext.Db.Queryable<Order>()
    .LeftJoin<User>((o, u) => o.UserId == u.UserId) // 訂單表左聯(lián)用戶表,關(guān)聯(lián)條件
    .Where((o, u) => o.TotalAmount > 100)
    .Select((o, u) => new
    {
        o.OrderId,
        o.OrderNo,
        o.TotalAmount,
        u.UserId,
        u.UserName
    })
    .ToList();
// 3表聯(lián)查:查詢訂單、用戶、訂單明細
var orderDetailList = SqlSugarContext.Db.Queryable<Order>()
    .LeftJoin<User>((o, u) => o.UserId == u.UserId)
    .LeftJoin<OrderItem>((o, u, i) => o.OrderId == i.OrderId)
    .Where((o, u, i) => o.OrderId == 1)
    .Select((o, u, i) => new
    {
        o.OrderId,
        o.OrderNo,
        u.UserName,
        i.ProductName,
        i.Quantity,
        i.Price
    })
    .ToList();

2. 事務(wù)處理

SqlSugar 支持多種事務(wù)模式,保證數(shù)據(jù)操作的原子性,異常時自動回滾。

#region 方式1:使用Using事務(wù)塊(推薦)
try
{
    // 開啟事務(wù)
    using (var tran = SqlSugarContext.Db.CreateTran())
    {
        // 事務(wù)內(nèi)的多個操作
        var user = new User() { UserName = "事務(wù)測試", Age = 20 };
        int userId = SqlSugarContext.Db.Insertable(user).ExecuteReturnIdentity();
        var order = new Order() { UserId = userId, OrderNo = "ORD2024001", TotalAmount = 100 };
        SqlSugarContext.Db.Insertable(order).ExecuteCommand();
        // 提交事務(wù)
        tran.Commit();
        Console.WriteLine("事務(wù)執(zhí)行成功");
    }
}
catch (Exception ex)
{
    // 異常自動回滾,無需手動處理
    Console.WriteLine($"事務(wù)執(zhí)行失敗,已回滾:{ex.Message}");
}
#region 方式2:手動開啟/提交/回滾事務(wù)
try
{
    SqlSugarContext.Db.Ado.BeginTran(); // 開啟事務(wù)
    // 業(yè)務(wù)操作
    SqlSugarContext.Db.Insertable(new User() { UserName = "手動事務(wù)測試" }).ExecuteCommand();
    SqlSugarContext.Db.Ado.CommitTran(); // 提交事務(wù)
}
catch (Exception ex)
{
    SqlSugarContext.Db.Ado.RollbackTran(); // 回滾事務(wù)
    Console.WriteLine($"事務(wù)執(zhí)行失敗,已回滾:{ex.Message}");
}
#endregion

3. 原生SQL執(zhí)行

對于復雜統(tǒng)計、存儲過程調(diào)用等場景,SqlSugar 支持直接執(zhí)行原生SQL語句,兼顧靈活性與安全性。

#region 查詢類SQL
// 1. 原生SQL查詢列表
var userList = SqlSugarContext.Db.Ado.SqlQuery<User>("select * from sys_user where age > @Age",
    new { Age = 18 }); // 參數(shù)化查詢,避免SQL注入
// 2. 原生SQL查詢單值
int count = SqlSugarContext.Db.Ado.SqlQuerySingle<int>("select count(1) from sys_user where age > @Age",
    new { Age = 18 });
// 3. 匿名對象查詢
var list = SqlSugarContext.Db.Ado.SqlQueryDynamic("select user_id,user_name from sys_user where age > @Age",
    new { Age = 18 });
#endregion
#region 增刪改類SQL
// 執(zhí)行非查詢SQL,返回受影響行數(shù)
int rows = SqlSugarContext.Db.Ado.ExecuteCommand(
    "update sys_user set age = age + 1 where user_id = @UserId",
    new { UserId = 1 });
#endregion
#region 存儲過程調(diào)用
SqlSugarContext.Db.Ado.UseStoredProcedure().ExecuteCommand("Proc_UpdateUserAge",
    new { UserId = 1, AddAge = 1 });
#endregion

4. 全局過濾(軟刪除/租戶隔離)

通過全局過濾器,自動為所有查詢追加條件,無需手動在每個查詢中寫Where,適合軟刪除、多租戶隔離等場景。

// 1. 給實體添加軟刪除字段
[SugarTable("sys_user")]
public class User
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public int Age { get; set; }
    [SugarColumn(DefaultValue = "0")]
    public bool IsDeleted { get; set; } // 軟刪除標記:0=未刪除,1=已刪除
}
// 2. 初始化SqlSugarClient時配置全局過濾器
var db = new SqlSugarClient(new ConnectionConfig()
{
    // 連接配置...
},
db =>
{
    // 全局軟刪除過濾器:所有查詢自動追加 IsDeleted=false
    db.QueryFilter.AddTableFilter<User>(u => u.IsDeleted == false);
    // 多租戶過濾器示例
    // db.QueryFilter.AddTableFilter<User>(u => u.TenantId == 當前租戶ID);
});
// 3. 使用:查詢時自動過濾已刪除數(shù)據(jù),無需手動寫Where
var list = db.Queryable<User>().ToList();
// 生成的SQL自動追加 where IsDeleted=0
// 4. 臨時禁用過濾器(查詢已刪除數(shù)據(jù))
var allList = db.Queryable<User>().Filter(null, false).ToList();

六、最佳實踐與官方資源

1. 開發(fā)最佳實踐

  1. 單例模式優(yōu)先:控制臺/WinForm/WPF 項目使用全局單例,Web 項目使用依賴注入,避免頻繁創(chuàng)建 SqlSugarClient 實例。
  2. 自動釋放連接:必須開啟 IsAutoCloseConnection=true,杜絕連接泄露問題。
  3. 異步優(yōu)先:Web 項目優(yōu)先使用 Async 結(jié)尾的異步方法,提升服務(wù)并發(fā)能力。
  4. 參數(shù)化查詢:原生SQL必須使用參數(shù)化,禁止字符串拼接SQL,避免SQL注入風險。
  5. 避免select *:查詢時指定需要的字段,減少數(shù)據(jù)傳輸,提升性能。
  6. 批量操作:大量數(shù)據(jù)新增/更新時,使用批量API而非循環(huán)單條操作,性能差距可達百倍。
  7. 調(diào)試必開日志:開發(fā)環(huán)境開啟 OnLogExecuting 日志,查看生成的SQL,及時發(fā)現(xiàn)性能問題。

2. 官方核心資源

3. 常見問題排查

  1. 連接失敗:檢查連接字符串格式、數(shù)據(jù)庫服務(wù)是否啟動、網(wǎng)絡(luò)是否通暢、賬號密碼是否正確。
  2. 主鍵自增不生效:檢查實體是否配置 IsPrimaryKey=true 和 IsIdentity=true,數(shù)據(jù)庫表字段是否設(shè)置自增。
  3. 字段映射失?。簷z查 SugarColumn 的 ColumnName 是否正確,是否開啟了 IsIgnore=true。
  4. SQL生成異常:開啟SQL日志,查看生成的SQL語句,排查表達式是否支持轉(zhuǎn)換為SQL。
  5. 內(nèi)存溢出/連接泄露:確認開啟了 IsAutoCloseConnection=true,未頻繁創(chuàng)建 SqlSugarClient 實例。

到此這篇關(guān)于.NET中SqlSugar使用教程小結(jié)的文章就介紹到這了,更多相關(guān).NET SqlSugar使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ASP.NET的HtmlForm控件學習及Post與Get的區(qū)別概述

    ASP.NET的HtmlForm控件學習及Post與Get的區(qū)別概述

    HtmlForm 控件用于控制form元素,本文主要介紹下HtmlForm控件的Method/Action方法(要提交數(shù)據(jù)的頁面,即數(shù)據(jù)要傳送至哪個網(wǎng)址)及Post與Get的區(qū)別感興趣的朋友可以了解下,或許對你學習HtmlForm控件有所幫助
    2013-02-02
  • asp.net 預(yù)防SQL注入攻擊之我見

    asp.net 預(yù)防SQL注入攻擊之我見

    說起防止SQL注入攻擊,感覺很郁悶,這么多年了大家一直在討論,也一直在爭論,可是到了現(xiàn)在似乎還是沒有定論。當不知道注入原理的時候會覺得很神奇,怎么就被注入了呢?會覺得很難預(yù)防。但是當知道了注入原理之后預(yù)防不就是很簡單的事情了嗎?
    2009-11-11
  • ABP入門系列之分頁功能的實現(xiàn)

    ABP入門系列之分頁功能的實現(xiàn)

    本節(jié)主要講解了如何使用ABP進行后臺分頁,并順帶講解了ABP后臺分頁邏輯的實現(xiàn)方式。同時也演示了如何使用X.PagedList進行前端分頁
    2017-03-03
  • 詳解ASP.NET Core 之 Identity 入門(三)

    詳解ASP.NET Core 之 Identity 入門(三)

    本篇文章主要介紹了ASP.NET Core 之 Identity 入門,主要負責對用戶的身份進行認證,有興趣的可以了解一下。
    2016-12-12
  • C#反射(Reflection)對類的屬性get或set值實現(xiàn)思路

    C#反射(Reflection)對類的屬性get或set值實現(xiàn)思路

    可以使用反射動態(tài)創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象獲取類型并調(diào)用其方法或訪問其字段和屬性,接下來為大家介紹下對一個類別的屬性進行set和get值,感興趣的各位可以參考下哈
    2013-03-03
  • asp.net使用LINQ to SQL連接數(shù)據(jù)庫及SQL操作語句用法分析

    asp.net使用LINQ to SQL連接數(shù)據(jù)庫及SQL操作語句用法分析

    這篇文章主要介紹了asp.net使用LINQ to SQL連接數(shù)據(jù)庫及SQL操作語句用法,較為詳細的分析了LINQ操作sql語句的功能、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-05-05
  • 關(guān)于ASP.NET中TreeView用法的一個小例子

    關(guān)于ASP.NET中TreeView用法的一個小例子

    下面是一個Treeview動態(tài)的綁定3層深度的樹的代碼,有需要的朋友可以參考一下
    2013-12-12
  • asp.net 處理F5刷新頁面重復提交頁面的一個思路

    asp.net 處理F5刷新頁面重復提交頁面的一個思路

    當提交完一個頁面后,如果我們再次點擊F5刷新該頁面的話,會彈出一個提示,提示我們?nèi)绻^續(xù),則會重新發(fā)送提交我們剛才提交的內(nèi)容,要是類似付款或一次性的操作,我們不應(yīng)該這樣操作,否則會造成重復提交的問題。
    2010-02-02
  • ASP.NET數(shù)據(jù)綁定的記憶碎片實現(xiàn)代碼

    ASP.NET數(shù)據(jù)綁定的記憶碎片實現(xiàn)代碼

    ASP.NET數(shù)據(jù)綁定的記憶碎片實現(xiàn)代碼,需要的朋友可以參考下
    2012-10-10
  • 配置ABP框架使用對象映射

    配置ABP框架使用對象映射

    這篇文章介紹了配置ABP框架使用對象映射的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

涞水县| 温宿县| 湖南省| 尚志市| 德令哈市| 顺昌县| 陵川县| 阳山县| 南丹县| 大足县| 皋兰县| 昆明市| 萨迦县| 米泉市| 林甸县| 洱源县| 闽侯县| 友谊县| 荥阳市| 德令哈市| 义马市| 囊谦县| 沙河市| 永寿县| 鄂托克旗| 慈利县| 腾冲县| 绩溪县| 云南省| 额济纳旗| 正阳县| 平昌县| 皮山县| 肥乡县| 天镇县| 射洪县| 年辖:市辖区| 平陆县| 大宁县| 福海县| 德格县|