C# SqlSugar ORM 指南
📅 2026/7/11 14:11:01
👁️ 阅读次数
📝 编程学习
一:框架简介
SqlSugar 是一款由果糖大数据科技团队维护的国产 .NET 开源 ORM 框架,以"开箱即用、简单易上手"著称。
核心优势:
多数据库支持:通过统一的 API 抽象,仅需更改配置中的
DbType即可无缝切换多种数据库。支持范围包括 MySql、SqlServer、Sqlite、Oracle、PostgreSQL,以及国产的达梦、人大金仓等,最近还开始支持 MongoDB。易于使用:设计理念强调"超级简单",大部分场景使用默认配置即可,学习曲线平滑。
高性能:在某些映射性能上甚至优于 Dapper,同时提供与商业组件媲美的大数据批量操作功能。
二:快速开始
2.1 安装 NuGet 包
| 项目类型 | 推荐包 |
|---|---|
| .NET Core / .NET 5+ | SqlSugarCore |
| .NET Framework | SqlSugar |
| 使用 PostgreSQL | SqlSugarCore + Npgsql |
| 使用 ClickHouse | SqlSugar.ClickHouseCore |
2.2 配置数据库连接
通常在 Program.cs 中将 ISqlSugarClient 注册为服务。以 MySQL 为例:
using SqlSugar;
builder.Services.AddScoped<ISqlSugarClient>(sp => {// 推荐使用 SqlSugarScope 管理单例var db = new SqlSugarClient(new ConnectionConfig() {DbType = DbType.MySql,ConnectionString = "server=localhost;port=3306;user=root;password=your_pwd;database=your_db",IsAutoCloseConnection = true, // 自动释放连接,推荐开启InitKeyType = InitKeyType.Attribute // 从实体特性中读取主键信息});// AOP 配置:打印执行的 SQL 日志(性能调优利器)db.Aop.OnLogExecuting = (sql, pars) => {Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));};return db;});
2.3 创建实体类
通过实体类和特性,将 C# 类与数据库表进行映射:
using SqlSugar;[SugarTable("sys_user")] // 指定数据库表名public class User {[SugarColumn(IsPrimaryKey = true, IsIdentity = true)] // 主键、自增public int Id { get; set; }[SugarColumn(Length = 50, IsNullable = false)]public string UserName { get; set; }public int Age { get; set; }[SugarColumn(IsNullable = true)]public string Email { get; set; }}
三:核心 CRUD 操作
3.1 创建 (Insert)
var db = serviceProvider.GetRequiredService<ISqlSugarClient>();// 插入单条,返回自增主键值var user = new User { UserName = "张三", Age = 25 };int newId = db.Insertable(user).ExecuteReturnIdentity();// 批量插入List<User> users = new List<User> { /* ... */ };db.Insertable(users).ExecuteCommand();
3.2 读取 (Query)
// 查询所有var allUsers = db.Queryable<User>().ToList();// 条件查询var adults = db.Queryable<User>().Where(u => u.Age > 18).ToList();// 查询单条(根据主键)var user = db.Queryable<User>().InSingle(1);
3.3 更新 (Update)
// 先查后改var userToUpdate = db.Queryable<User>().InSingle(1);userToUpdate.Age = 26;db.Updateable(userToUpdate).ExecuteCommand();// 根据条件直接更新(批量)
编程学习
技术分享
实战经验