深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架

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. 多数据库项目: 支持多种主流数据库的无缝切换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python “字典” 实战案例:5个项目开发实例

Python “字典” 实战案例&#xff1a;5个项目开发实例 内容摘要 本文包括 5 个使用 Python 字典的综合应用实例。具体是&#xff1a; 电影推荐系统配置文件解析器选票统计与排序电话黄页管理系统缓存系统&#xff08;LRU 缓存&#xff09; 以上每一个实例均有完整的程序代…

九、CSS工程化方案

一、PostCSS介绍 二、PostCSS插件的使用 项目安装 - npm install postcss-cli 全局安装 - npm install postcss-cli -g postcss-cli地址&#xff1a;GitHub - postcss/postcss-cli: CLI for postcss postcss地址&#xff1a;GitHub - postcss/postcss: Transforming styles…

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架&#xff0c;设计目的是简化搭建及开发过程&#xff0c;并不是对Spring功能上的增强&#xff0c;而是提供了一种快速使用Spr…

GESP2024年3月认证C++六级( 第三部分编程题(2)好斗的牛)

参考程序&#xff08;暴力枚举&#xff09; #include <iostream> #include <vector> #include <algorithm> using namespace std; int N; vector<int> a, b; int ans 1e9; int main() {cin >> N;a.resize(N);b.resize(N);for (int i 0; i &l…

kafka消费者详细介绍(超级详细)

文章目录 一、Kafka 消费者与消费者组1.1 Kafka 消费者&#xff08;Consumer&#xff09;概述1.1.1 消费者工作流程1.1.2 消费者的关键配置 1.2 Kafka 消费者组&#xff08;Consumer Group&#xff09;概述1.2.1 消费者组的工作原理1.2.2 消费者组的优点1.2.3 消费者组的再均衡…

SpringBoot统一数据返回格式 统一异常处理

统一数据返回格式 & 统一异常处理 1. 统一数据返回格式1.1 快速入门1.2 存在问题1.3 案列代码修改1.4 优点 2. 统一异常处理 1. 统一数据返回格式 强制登录案例中,我们共做了两部分⼯作 通过Session来判断⽤⼾是否登录对后端返回数据进⾏封装,告知前端处理的结果 回顾 后…

Elasticsearch+kibana安装(简单易上手)

下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口&#xff08;可以不修改&#xff09; 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…

十年筑梦,再创鲸彩!庆祝和鲸科技十周年

2025 年 1 月 16 日&#xff0c;“十年筑梦&#xff0c;再创鲸彩” 2025 和鲸科技十周年庆暨 2024 年终表彰大会圆满落幕。 十年征程&#xff0c;和鲸科技遨游于科技蓝海&#xff0c;破浪前行&#xff0c;无惧风雨。期间所取得的每一项成就&#xff0c;都凝聚着全体成员的智慧结…

【Uniapp-Vue3】动态设置页面导航条的样式

1. 动态修改导航条标题 uni.setNavigationBarTitle({ title:"标题名称" }) 点击修改以后顶部导航栏的标题会从“主页”变为“动态标题” 2. 动态修改导航条颜色 uni.setNavigationBarColor({ backgroundColor:"颜色" }) 3. 动态添加导航加载动画 // 添加加…

openlayer getLayerById 根据id获取layer图层

背景&#xff1a; 在项目中使用getLayerById获取图层&#xff0c;这个getLayerById()方法不是openlayer官方文档自带的&#xff0c;而是自己封装的一个方法&#xff0c;这个封装的方法的思路是&#xff1a;遍历所有的layer&#xff0c;根据唯一标识【可能是id&#xff0c;也可能…

Unity入门2 背景叠层 瓦片规则

切割场景 瓦片调色盘 放在Assets里面新建瓦片地图,palettes tile 瓦片 palettes调色板 上下窗口是分开的 拖进这个格子窗 瓦片太碎&#xff0c;要封装 装好之后&#xff0c;只是把瓦片放上去了&#xff0c;但是还没有画布&#xff0c;显示是这样的 no valid target 新建“…

Kafka 日志存储 — 日志清理

Kafka 提供两种日志清理策略&#xff1a;日志清理(Log Delete)与日志压缩(Log Compaction)。 1 日志清理 通过broker端参数log.cleanup.policy来设置日志清理策略&#xff0c;默认值为“delete”。如果要采用日志压缩的清理策略&#xff0c;则设置为“compact”。可以同时支持…

Semantic Kernel - Kernel理解

目录 一、关于Kernel 二、案例实战 三、运行截图 一、关于Kernel 微软的 Semantic Kernel 项目中,Semantic Kernel 是一个工具框架,旨在使得开发人员能够更容易地将大语言模型(如GPT)集成到不同的应用中。它通过提供一组接口、任务模板和集成模块,使开发者能够轻松地设计…

人格分裂(交互问答)-小白想懂Elasticsearch

通过交互式追问了解一个中间件 ? 啥是Elasticsearch ! 分布式搜索和分析引擎 ? 为啥是分布式搜索&#xff0c;单体难道用不了吗 ? 实际上是说这个东西可以分布式部署 ! 单机可用但扩展性差&#xff0c;分布式通过分片、副本和负载均衡实现海量数据存储与高并发处理 ? 提…

golang 使用双向链表作为container/heap的载体

MyHeap&#xff1a;container/heap的数据载体&#xff0c;需要实现以下方法&#xff1a; Len&#xff1a;堆中数据个数 Less&#xff1a;第i个元素 是否必 第j个元素 值小 Swap&#xff1a;交换第i个元素和 第j个元素 Push&#xff1a;向堆中追加元素 Pop&#xff1a;从堆…

svn: E000111: Error running context: Connection refused

1、具体报错&#xff1a; 看起来是window主机的子系统ubuntu svn客户端无法访问到window主机的svn的服务端。 2、问题&#xff1a; window主机安装子系统ubuntu&#xff0c;ubuntu是可以直接访问外网&#xff0c;但是ubuntu是不能访问window主机的服务&#xff0c;比如svn的se…

PostgreSQL TRUNCATE TABLE 操作详解

PostgreSQL TRUNCATE TABLE 操作详解 引言 在数据库管理中,经常需要对表进行操作以保持数据的有效性和一致性。TRUNCATE TABLE 是 PostgreSQL 中一种高效删除表内所有记录的方法。本文将详细探讨 PostgreSQL 中 TRUNCATE TABLE 的使用方法、性能优势以及注意事项。 什么是 …

【时时三省】(C语言基础)对比一组函数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对比一组函数 比如对比一下scanf fscanf sscanf和printf fprintf sprintf scanf 针对标准输入的格式化的输入语句 其实它针对的是stdin fscanf 针对所有输入流的格式化的输入语句 它是针对s…

音频 PCM 格式 - raw data

文章目录 raw 音频格式&#xff1a;PCM其他音频格式&#xff1a;mp31. 无损压缩音频&#xff08;类比 PNG 图像&#xff09;2. 有损压缩音频&#xff08;类比 JPEG 图像&#xff09; 试了一下科大讯飞的音频识别云 api&#xff0c;踩了点坑 与本文无关&#xff1a;讯飞的 api 使…

(MySQL)头歌数据库作业答案

1.数据库和表的基本操作 1.1数据库和表的基本操作&#xff08;一&#xff09; 第1关&#xff1a;查看表结构与修改表名 本关任务&#xff1a;修改表名&#xff0c;并能顺利查询到修改后表的结构。 USE Company;#请在此处添加实现代码 ########## Begin ###################…