深入解析 SQLSugar:从基础 CRUD 到读写分离与高级特性详解

SQLSugar 使用指南:从入门到进阶及高级特性详解

SQLSugar 是一款功能丰富的 .NET ORM 框架,它支持多种数据库、简洁的 API 和优雅的编程体验。相较于其他 ORM,SQLSugar 提供了很多开发者友好的功能,比如自动创建表结构、灵活的查询构建、支持事务、多表联查等。本文将从基础的 CRUD 操作开始,逐步深入介绍 SQLSugar 的进阶和高级功能,尤其是 CRUD、联表查询、事务处理、导航属性、并发冲突、依赖注入、读写分离等高级特性,帮助你全面掌握 SQLSugar 的使用方法。


一、SQLSugar 基础

1.1 安装 SQLSugar

首先,使用 NuGet 安装 SQLSugar:

Install-Package SqlSugar

在 .NET 项目中安装后,你可以通过配置数据库连接来初始化 SQLSugar 实例:

SqlSugarScope db = new SqlSugarScope(new ConnectionConfig()
{ConnectionString = "数据库连接字符串",DbType = DbType.SqlServer, // 数据库类型IsAutoCloseConnection = true // 自动关闭连接
});
1.2 基本的 CRUD 操作

SQLSugar 提供了丰富的 API 以实现基本的 CRUD 操作。

1.2.1 插入数据
var user = new User { Name = "张三", Age = 25 };
db.Insertable(user).ExecuteCommand();
1.2.2 查询数据
var user = db.Queryable<User>().Where(a => a.Id == 1).Single();
1.2.3 更新数据
db.Updateable(new User() { Id = 1, Age = 30 }).ExecuteCommand();
1.2.4 删除数据
db.Deleteable<User>().Where(a => a.Id == 1).ExecuteCommand();

SQLSugar 的基本 CRUD 操作非常简洁,开发者可以通过这些 API 快速操作数据库。

1.3 自动创建表结构

SQLSugar 支持自动创建表结构,这对于需要快速构建表结构的场景十分有用。通过 Code First,你可以轻松地同步表结构:

db.CodeFirst.InitTables(typeof(User));

这样,SQLSugar 会根据你的实体类自动生成或同步数据库中的表结构。


二、SQLSugar 进阶功能

2.1 多表联查

SQLSugar 提供了丰富的联表查询功能,可以通过 Join 进行表与表之间的关联查询。

var query = db.Queryable<User, Order>((u, o) => new JoinQueryInfos(JoinType.Left, u.Id == o.UserId)).Select((u, o) => new { u.Name, o.OrderId, o.Amount }).ToList();

此代码展示了如何通过联表查询用户与其订单信息。

2.2 分页查询

分页查询是 SQL 操作中非常常见的一部分,SQLSugar 提供了便捷的分页 API:

var pageIndex = 1;
var pageSize = 10;
var totalCount = 0;var users = db.Queryable<User>().Where(u => u.Age > 18).ToPageList(pageIndex, pageSize, ref totalCount);

ToPageList 会根据 pageIndexpageSize 返回分页数据,并通过 totalCount 得到符合条件的记录总数。

2.3 事务处理

SQLSugar 提供了简洁的事务处理机制,确保数据一致性:

db.Ado.BeginTran();
try
{db.Insertable(new User() { Name = "张三", Age = 25 }).ExecuteCommand();db.Insertable(new Order() { UserId = 1, Amount = 100 }).ExecuteCommand();db.Ado.CommitTran();
}
catch
{db.Ado.RollbackTran();
}

在事务中执行多个数据库操作,如果有任何异常发生,SQLSugar 会自动回滚事务。


三、SQLSugar 高级特性

3.1 导航属性

SQLSugar 支持导航属性,使得在实体类中定义关联关系变得更加简洁。当你定义了带有导航属性的实体时,SQLSugar 能够自动处理关联查询。

假设有 UserOrder 两个实体,其中 User 可以拥有多个 Order

public class User
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }[Navigate(NavigateType.OneToMany, nameof(Order.UserId))]public List<Order> Orders { get; set; }
}public class Order
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public int UserId { get; set; }public decimal Amount { get; set; }
}

使用 Include 方法,可以方便地进行导航属性查询:

var usersWithOrders = db.Queryable<User>().Includes(u => u.Orders).ToList();

通过这种方式,SQLSugar 会自动加载用户及其订单信息,无需手动编写复杂的 SQL。

3.2 并发冲突处理

并发冲突是数据库操作中的常见问题,SQLSugar 提供了简单的机制来处理并发冲突。你可以通过 RowVersionLock 等机制来处理更新时的冲突。

public class User
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }public DateTime LastUpdateTime { get; set; }
}

在更新数据时,SQLSugar 可以确保通过时间戳或其他字段防止多个操作同时更改数据。

db.Updateable(user).Where(u => u.LastUpdateTime == oldUpdateTime).ExecuteCommand();

这种方式能够防止并发写入时出现的数据不一致问题。

3.3 读写分离

SQLSugar 支持读写分离,可以在多主从数据库环境下进行配置,以提升读操作的性能。通过配置多个连接字符串,你可以轻松实现主库写、从库读的分离操作。

db = new SqlSugarScope(new List<ConnectionConfig>()
{new ConnectionConfig(){ConnectionString = "主库连接字符串",DbType = DbType.SqlServer,IsAutoCloseConnection = true,ConfigId = "master"},new ConnectionConfig(){ConnectionString = "从库连接字符串",DbType = DbType.SqlServer,IsAutoCloseConnection = true,ConfigId = "slave"}
}, db =>
{db.Aop.CurdAfter = (sugar, info) =>{if (info.Sql.Contains("SELECT"))db.ChangeConfig("slave");elsedb.ChangeConfig("master");};
});

通过这个配置,SQLSugar 会自动将读操作路由到从库,将写操作路由到主库。

3.4 依赖注入

SQLSugar 支持与 ASP.NET Core 的依赖注入机制集成。你可以在项目中配置 SQLSugar 的依赖注入,简化数据库上下文的使用。

Startup.cs 中配置 SQLSugar 依赖注入:

public void ConfigureServices(IServiceCollection services)
{services.AddScoped<ISqlSugarClient>(s => new SqlSugarScope(new ConnectionConfig(){ConnectionString = "数据库连接字符串",DbType = DbType.SqlServer,IsAutoCloseConnection = true}));
}

在控制器或服务中通过构造函数注入 ISqlSugarClient

public class UserService
{private readonly ISqlSugarClient _db;public UserService(ISqlSugarClient db){_db = db;}public List<User> GetUsers(){return _db.Queryable<User>().ToList();}
}

依赖注入能够更好地管理数据库上下文的生命周期,简化使用 SQLSugar 进行数据库操作的流程。


四、SQLSugar 的优势与劣势

4.1 优势
  1. 多数据库支持:SQLSugar 支持多种数据库,如 SQL Server、MySQL、PostgreSQL 等,切换数据库非常方便。
  2. 丰富的功能:内置了丰富的功能,如 Code First、导航属性、读写分离、并发处理等,大大简化开发工作。
  3. 易用的 API:SQLSugar 的 API 设计简洁明了,上手非常容易,尤其适合中小型项目。
  4. 灵活的扩展性:支持自定义 SQL、自定义拦截器、扩展方法等,具有很强的扩展性。
4.2 劣势
  1. 学习曲线:尽管 SQLSugar 易用,但在学习一些高级特性时可能需要投入一定时间。
  2. 复杂查询性能:在面对非常复杂的查询场景时,可能需要借助原生 SQL 来提高性能。
  3. 社区生态:与 Entity Framework 等主流 ORM 框架相比,SQLSugar 的社区生态和文档相对较少。

结语

SQLSugar 是一个功能强大且灵活的 ORM 框架,它简化了 .NET 开发中与数据库交互的流程。从基础的 CRUD 到高级的读写分离、事务管理,SQLSugar 提供了一整套完善的解决方案。对于中小型项目来说,SQLSugar 是一个非常不错的选择。如果你正在寻找一个轻量级、高效的 ORM 框架,SQLSugar 值得一试。

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

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

相关文章

Centos中关闭swap分区,关闭内存交换

概述&#xff1a; Swap 分区是 Linux 系统中扩展物理内存的一种机制。Swap的主要功能是当全部的RAM被占用并需要更多内存时&#xff0c;用磁盘空间代理RAM内存。Swap对虚拟化技术资源损耗非常大&#xff0c;一般虚拟化是不允许开启交换空间的&#xff0c;如果不关闭Swap&…

【Linux课程学习】make/Makefile:Linux项目自动化构建工具

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f349;一.make/Makefile的理解&#xff1a; …

关于STM32项目面试题02:ADC与DAC篇(输入部分NTC、AV:0-5V、AI:4-20mA和DAC的两个引脚)

博客的风格是&#xff1a;答案一定不能在问题的后面&#xff0c;要自己想、自己背&#xff1b;回答都是最精简、最精简、最精简&#xff0c;可能就几个字&#xff0c;你要自己自信的展开。 面试官01&#xff1a;什么是模数转换/ADC&#xff1f;说说模数转换的流程&#xff1f; …

基于SpringBoot+Vue+MySQL的手机销售管理系统

系统展示 用户前台界面 管理员后台界面 商家后台界面 系统背景 随着智能手机的普及和市场竞争的日益激烈&#xff0c;手机销售行业面临着前所未有的挑战与机遇。传统的手工记录和简单的电子表格管理方式已难以满足现代手机销售业务的需求&#xff0c;销售数据的混乱和管理效率低…

技术成神之路:设计模式(十四)享元模式

介绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构性设计模式&#xff0c;旨在通过共享对象来有效地支持大量细粒度的对象。 1.定义 享元模式通过将对象状态分为内部状态&#xff08;可以共享&#xff09;和外部状态&#xff08;不可共享&#xff09;&#xf…

C语言-文件操作-一些我想到的、见到的奇怪的问题

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C语言】 欢迎点赞&#x1f44d;收藏⭐关注❤️ C语言-文件操作-一些我想到的、见到的奇怪的问题 前言1.在不关闭文件的情况下&#xff0c;连续多次调用 fopen() 打开同一个文件&#xff0c;会发生什么&#xff1f;1.1过…

Cursor火出圈,未来程序员还有出路吗?

大家好&#xff0c;我是凡人。 今天我表弟家邻居的阿姨&#xff0c;托他问问我目前程序员还有前景吗&#xff0c;希望我根据十几年的经验给出点建议&#xff0c;看看程序员这条路未来能不能走。 一下子不知道该怎么回复他了&#xff0c;如果是三年前问我&#xff0c;肯定毫不…

【React】React18.2.0核心源码解读

前言 本文使用 React18.2.0 的源码&#xff0c;如果想回退到某一版本执行git checkout tags/v18.2.0即可。如果打开源码发现js文件报ts类型错误请看本人另一篇文章&#xff1a;VsCode查看React源码全是类型报错如何解决。 阅读源码的过程&#xff1a; 下载源码 观察 package…

解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!

环境介绍 每人搭建的环境不一样&#xff0c;情况不一样&#xff0c;但是原因都是下面几种&#xff1a; wvp配置不当网络端口未放开网络不通 我搭建的环境&#xff1a; WVP服务&#xff1a;windows下&#xff0c;用idea运行的源码 ZLM服务&#xff1a;虚拟机里 问题描述 1.…

【人工智能学习笔记】5 计算机视觉基础

计算机视觉概述 定义&#xff1a;计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何使机器“看”的科学&#xff0c;也可以看作是研究如何使人工系统从图像活多维数据中“感知”的科学终极目标&#xff1a;计算机视觉成为机器认知世界的基础&#xff0c;终极目…

superset 解决在 mac 电脑上发送 slack 通知的问题

参考文档: https://superset.apache.org/docs/configuration/alerts-reports/ 核心配置: FROM apache/superset:3.1.0USER rootRUN apt-get update && \apt-get install --no-install-recommends -y firefox-esrENV GECKODRIVER_VERSION0.29.0 RUN wget -q https://g…

【高级篇】ENC编码器如何挂载Windows共享目录进行录像

【高级篇】ENC编码器如何挂载Windows共享目录进行录像 Windows共享目录前提条件1、打开控制面板&#xff0c;点击 程序 菜单2、点击 启用或关闭Windows功能 菜单3、如下图&#xff0c;勾选SMB1.0/CIFS文件共享支持,并点击确认按钮&#xff0c;然后根据提示重启电脑 创建共享目录…

如何利用Samba跨平台分享Ubuntu文件夹

1.安装Samba 终端输入sudo apt install samba 2.配置Samba 终端输入sudo vim /etc/samba/smb.conf 打开配置文件 滑动文件到最底下 输入以下内容 [Share] # 要共享的文件夹路径 path /home/xxx/sambashare read only no browsable yes编辑完成后按一下Esc按键后输入:wq回…

ABAP-Swagger 一种公开 ABAP REST 服务的方法

ABAP-Swagger An approach to expose ABAP REST services 一种公开 ABAP REST 服务的方法 Usage 1: develop a class in ABAP with public methods 2: implement interface ZIF_SWAG_HANDLER, and register the public methods(example method zif_swag_handler~meta) 3: …

Docker 以外置数据库方式部署禅道

2.安装步骤 2.1.参考资料 禅道官网文档: https://www.zentao.net/book/zentaopms/docker-1111.html https://www.zentao.net/book/zentaopms/405.html 2.2.详细步骤 ssh 登录服务器创建目录 /opt/zentao /opt/zentao/data /opt/zentao/db cd /opt mkdir zentao mkdir zentao…

开源免费的NAS系统-TrueNAS CORE上创建CentOS7虚拟机

目录 文章目录 目录1、说明2、准备工作2.1、准备安装镜像2.1、创建用户2.2、开启 ssh 服务2.3、设置用户权限2.4、上传系统镜像2.5、 添加虚拟机 3、开始安装系统3.1、启动虚拟机3.2、选择语言3.3、配置网络3.4、设置 root 密码3.5、删除光驱3.6、重启虚拟机3.7、使用 ssh 连接…

C++ | Leetcode C++题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; class Solution { public:int thirdMax(vector<int> &nums) {int *a nullptr, *b nullptr, *c nullptr;for (int &num : nums) {if (a nullptr || num > *a) {c b;b a;a &num;} else if (*a > num &&am…

【Python】练习:控制语句(二)第4关

第4关&#xff1a;控制结构综合实训 第一题第二题&#xff08;※&#xff09;第三题&#xff08;※&#xff09;第四题&#xff08;※&#xff09;第五题&#xff08;※&#xff09;第六题&#xff08;※&#xff09; 第一题 #第一题def rankHurricane(velocity):#请在下面编写…

记录|C#的资源路径设置的资料整理

目录 前言一、在这里插入图片描述 https://bbs.csdn.net/topics/360001606 二、三、添加到资源文件中四、获得图片的三种路径方法五、给资源文件添加文件夹更新时间 前言 参考文章&#xff1a; 原本以为C# winform中进行图片等文件的路径的读取是直接可以按照资源文件中显示的来…

【ArcGIS微课1000例】0121:面状数据共享边的修改方法

文章目录 一、共享边概述二、快速的修改办法1. 整形共享边2. 修改边3. 概化边缘一、共享边概述 面状数据共享边指的是两个或多个面状数据(如多边形)共同拥有的边界。在地理信息系统(GIS)、三维建模、大数据分析等领域,面状数据共享边是描述面状空间数据拓扑关系的重要组成…