.NET中SqlSugar使用教程小結(jié)
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();
#endregion2. 查詢操作(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);
#endregion3. 更新操作(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();
#endregion4. 刪除操作(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}");
}
#endregion3. 原生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 });
#endregion4. 全局過濾(軟刪除/租戶隔離)
通過全局過濾器,自動為所有查詢追加條件,無需手動在每個查詢中寫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ā)最佳實踐
- 單例模式優(yōu)先:控制臺/WinForm/WPF 項目使用全局單例,Web 項目使用依賴注入,避免頻繁創(chuàng)建 SqlSugarClient 實例。
- 自動釋放連接:必須開啟 IsAutoCloseConnection=true,杜絕連接泄露問題。
- 異步優(yōu)先:Web 項目優(yōu)先使用 Async 結(jié)尾的異步方法,提升服務(wù)并發(fā)能力。
- 參數(shù)化查詢:原生SQL必須使用參數(shù)化,禁止字符串拼接SQL,避免SQL注入風險。
- 避免select *:查詢時指定需要的字段,減少數(shù)據(jù)傳輸,提升性能。
- 批量操作:大量數(shù)據(jù)新增/更新時,使用批量API而非循環(huán)單條操作,性能差距可達百倍。
- 調(diào)試必開日志:開發(fā)環(huán)境開啟 OnLogExecuting 日志,查看生成的SQL,及時發(fā)現(xiàn)性能問題。
2. 官方核心資源
- 官方文檔:https://www.donet5.com/Home/Doc(最全中文文檔,持續(xù)更新)
- GitHub 倉庫:https://github.com/DotNetNext/SqlSugar (源碼、Issue、更新日志)
- 官方視頻教程:B站搜索 SqlSugar 官方教程,有完整的入門到進階視頻
3. 常見問題排查
- 連接失敗:檢查連接字符串格式、數(shù)據(jù)庫服務(wù)是否啟動、網(wǎng)絡(luò)是否通暢、賬號密碼是否正確。
- 主鍵自增不生效:檢查實體是否配置 IsPrimaryKey=true 和 IsIdentity=true,數(shù)據(jù)庫表字段是否設(shè)置自增。
- 字段映射失?。簷z查 SugarColumn 的 ColumnName 是否正確,是否開啟了 IsIgnore=true。
- SQL生成異常:開啟SQL日志,查看生成的SQL語句,排查表達式是否支持轉(zhuǎn)換為SQL。
- 內(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ū)別概述
HtmlForm 控件用于控制form元素,本文主要介紹下HtmlForm控件的Method/Action方法(要提交數(shù)據(jù)的頁面,即數(shù)據(jù)要傳送至哪個網(wǎng)址)及Post與Get的區(qū)別感興趣的朋友可以了解下,或許對你學習HtmlForm控件有所幫助2013-02-02
詳解ASP.NET Core 之 Identity 入門(三)
本篇文章主要介紹了ASP.NET Core 之 Identity 入門,主要負責對用戶的身份進行認證,有興趣的可以了解一下。2016-12-12
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操作語句用法,較為詳細的分析了LINQ操作sql語句的功能、使用方法與相關(guān)注意事項,需要的朋友可以參考下2016-05-05
關(guān)于ASP.NET中TreeView用法的一個小例子
下面是一個Treeview動態(tài)的綁定3層深度的樹的代碼,有需要的朋友可以參考一下2013-12-12
ASP.NET數(shù)據(jù)綁定的記憶碎片實現(xiàn)代碼
ASP.NET數(shù)據(jù)綁定的記憶碎片實現(xiàn)代碼,需要的朋友可以參考下2012-10-10

