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

news2025/1/27 9:21:40

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.coloradmin.cn/o/2283366.html

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

相关文章

数据结构——概念与时间空间复杂度

目录 前言 一相关概念 1什么是数据结构 2什么是算法 二算法效率 1如何衡量算法效率的好坏 2算法的复杂度 三时间复杂度 1时间复杂度表示 2计算时间复杂度 2.1题一 2.2题二 2.3题三 2.4题四 2.5题五 2.6题六 2.7题七 2.8题八 四空间复杂度 1题一 2题二 3…

牛客周赛 Round 78 A-C

A.时间表查询&#xff01; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/100671/A 来源&#xff1a;牛客网 题目描述 今天是2025年1月25日&#xff0c;今年的六场牛客寒假算法基础集训营中&#xff0c;前两场比赛已经依次于 20250121、20250123 举行&#xff1b;而…

HTML-新浪新闻-实现标题-样式1

用css进行样式控制 css引入方式&#xff1a; --行内样式&#xff1a;写在标签的style属性中&#xff08;不推荐&#xff09; --内嵌样式&#xff1a;写在style标签中&#xff08;可以写在页面任何位置&#xff0c;但通常约定写在head标签中&#xff09; --外联样式&#xf…

能说说MyBatis的工作原理吗?

大家好&#xff0c;我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助&#xff1b; 能说说MyBatis的工作原理吗&#xff1f; MyBatis 是一款流行的持久层框架&#xff0c;它通过简化数据库操作&#xff0c;帮助开发者更高效地与数据库进行交互。MyBatis…

MFC程序设计(四)窗口创建机制

钩子函数 钩子属于win32技术&#xff0c;具有优先勾取消息的权利&#xff1a;当一个消息产生时&#xff0c;钩子勾取消息进行处理&#xff0c;然后消息才送回程序 接下来以一个勾取窗口创建消息的钩子为例进行讲解 钩子类型有键盘钩子&#xff0c;鼠标钩子&#xff0c;WH_CBT…

【JavaEE进阶】Spring留言板实现

目录 &#x1f38d;预期结果 &#x1f340;前端代码 &#x1f384;约定前后端交互接口 &#x1f6a9;需求分析 &#x1f6a9;接口定义 &#x1f333;实现服务器端代码 &#x1f6a9;lombok介绍 &#x1f6a9;代码实现 &#x1f334;运行测试 &#x1f384;前端代码实…

Unity开发一个单人FPS游戏的教程总结

这个系列的前几篇文章介绍了如何从头开始用Unity开发一个FPS游戏&#xff0c;感兴趣的朋友可以回顾一下。这个系列的文章如下&#xff1a; Unity开发一个FPS游戏_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个F…

论文速读|Is Cosine-Similarity of Embeddings Really About Similarity?WWW24

论文地址&#xff1a; https://arxiv.org/abs/2403.05440 https://dl.acm.org/doi/abs/10.1145/3589335.3651526 bib引用&#xff1a; inproceedings{Steck_2024, series{WWW ’24},title{Is Cosine-Similarity of Embeddings Really About Similarity?},url{http://dx.doi.o…

71.在 Vue 3 中使用 OpenLayers 实现按住 Shift 拖拽、旋转和缩放效果

前言 在前端开发中&#xff0c;地图功能是一个常见的需求。OpenLayers 是一个强大的开源地图库&#xff0c;支持多种地图源和交互操作。本文将介绍如何在 Vue 3 中集成 OpenLayers&#xff0c;并实现按住 Shift 键拖拽、旋转和缩放地图的效果。 实现效果 按住 Shift 键&#…

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)

一、引言 1.1 研究背景与意义 在数字化时代,医疗行业正经历着深刻的变革,智能化技术的应用为其带来了前所未有的发展机遇。随着医疗数据的指数级增长,传统的医疗诊断和治疗方式逐渐难以满足现代医疗的需求。据统计,全球医疗数据量预计每年以 48% 的速度增长,到 2025 年将…

250125-package

1. 定义 包就是文件夹&#xff0c;作用是在大型项目中&#xff0c;避免不同人的编写的java文件出现同名进而导致报错&#xff1b;想象一个场景&#xff0c;在一个根目录中&#xff0c;每一个人都有自己的一个java文件夹&#xff0c;他可以将自己编写的文件放在该文件夹里&…

FastExcel的使用

前言 FastExcel 是一款基于 Java 的开源库&#xff0c;旨在提供快速、简洁且能解决大文件内存溢出问题的 Excel 处理工具。它兼容 EasyExcel&#xff0c;提供性能优化、bug 修复&#xff0c;并新增了如读取指定行数和将 Excel 转换为 PDF 的功能。 FastExcel 的主要功能 高性…

Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)

redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…

python3+TensorFlow 2.x(三)手写数字识别

目录 代码实现 模型解析&#xff1a; 1、加载 MNIST 数据集&#xff1a; 2、数据预处理&#xff1a; 3、构建神经网络模型&#xff1a; 4、编译模型&#xff1a; 5、训练模型&#xff1a; 6、评估模型&#xff1a; 7、预测和可视化结果&#xff1a; 输出结果&#xff…

基础项目——扫雷(c++)

目录 前言一、环境配置二、基础框架三、关闭事件四、资源加载五、初始地图六、常量定义七、地图随机八、点击排雷九、格子类化十、 地图类化十一、 接口优化十二、 文件拆分十三、游戏重开 前言 各位小伙伴们&#xff0c;这期我们一起学习出贪吃蛇以外另一个基础的项目——扫雷…

[操作系统] 深入进程地址空间

程序地址空间回顾 在C语言学习的时&#xff0c;对程序的函数、变量、代码等数据的存储有一个大致的轮廓。在语言层面上存储的地方叫做程序地址空间&#xff0c;不同类型的数据有着不同的存储地址。 下图为程序地址空间的存储分布和和特性&#xff1a; 使用以下代码来验证一下…

OpenCV:图像处理中的低通滤波

目录 简述 什么是低通滤波&#xff1f; 各种滤波器简介与实现 方盒滤波 均值滤波 中值滤波 高斯滤波 双边滤波 各种滤波的对比与应用场景 相关阅读 OpenCV基础&#xff1a;图像变换-CSDN博客 OpenCV&#xff1a;图像滤波、卷积与卷积核-CSDN博客 简述 低通滤波是一…

32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)

背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析&#xff08;1&#xff09;&#xff1a;stdio测试&#xff08;一&#xff09; 继续stdio测试的分析&#xff0c;上篇讲到标准IO端口初始化&#xff0c;单从测试内容来说其实很简单&#xff0c;没啥可分析的&#xff0c;但这几篇…

OpenAI掀桌子!免费版ChatGPT,提供o3-mini模型!

逆天免费用 今天凌晨&#xff0c;OpenAI联合创始人兼首席执行官Sam Altman宣布了一个大消息——免费版ChatGPT&#xff0c;将提供o3-mini模型&#xff01; 网页们纷纷不淡定了 看来OpenAI&#xff0c;这o3-mini还没正式上线呢&#xff0c;就免费开放使用了。 不过还是要感谢…

redis离线安装部署详解(包括一键启动)

像上文一样 因为在学习的过程中没有查到一个详细的离线部署方案 所以在自己学习之后想要自己写一个文章 希望可以帮助后续学习redis离线部署的朋友少走一线弯路 首先就是下载安装包 可以自己在本地下载再传到机器上&#xff08;通过xftp或lrzsz都可&#xff09; http://d…