【BlogBook书】5、Sqlsugar:数据库ORM

科技   科技   2024-01-13 18:01   北京  


2024
B
C
V
P
B
O
O
K


BCVP.BOOK 是BlogCore的快速操作手册指南,列举了BlogCore常见的23个基本知识点,没有冗余的讲解,通过直接地、快速地对每个知识点做分步说明,方便初学者快速使用,或者老手查漏补缺


可以结合ASP.NET8.0视频,快速掌握所有知识点:

https://www.bilibili.com/video/BV13g4y1Z7in


框架高度集成国产优秀ORM——Sqlsugar,支持常规企业级所有的数据库操作场景:

1、全部兼容国产数据库;2、支持同时连接操作多种数据库,且相互之间不受影响;3、支持事务;4、支持主从分离模式;5、支持主备模式(主库挂了,会自动切换到备用库);6、详细的Sql操作日志;


一、相关的依赖注入配置

builder.Services.AddSqlsugarSetup();

相关参数设置

//MainDb:标识当前项目的主库,所对应的连接字符串的Enabled必须为true//Log:标识日志库,所对应的连接字符串的Enabled必须为true,且Log关键字不能修改//从库只需配置Slaves数组,要求数据库类型一致!,比如都是SqlServer
//主备模式,又称故障转移方案://如果主库挂了,会自动切换到备用连接,格式如下://备用连接的ConnId配置为主库的ConnId+数字即可,比如主库的ConnId为Main,那么备用连接的ConnId为Mian1//主库、备用库无需数据库类型一致!//备用库不会有程序维护,需要手动维护!"MainDB": "Main", //当前项目的主库,所对应的连接字符串的Enabled必须为true"DBS": [ /* 对应下边的 DBType MySql = 0, SqlServer = 1, Sqlite = 2, Oracle = 3, PostgreSQL = 4, Dm = 5,//达梦 Kdbndp = 6,//人大金仓 */ { "ConnId": "Main", "DBType": 2, "Enabled": true, "Connection": "WMBlog.db", //sqlite只写数据库名就行 "Slaves": [ { "HitRate": 0,// 值越大,优先级越高 0不使用 "Connection": "WMBlog2.db" } ] }, { "ConnId": "Main2", "DBType": 2, "Enabled": true, "Connection": "WMBlog3.db", //sqlite只写数据库名就行 "Slaves": [ { "HitRate": 0,// 值越大,优先级越高 0不使用 "Connection": "WMBlog4.db" } ] }, { "ConnId": "Log", //日志库连接固定名称,不要改,其他的可以改 "DBType": 2, "Enabled": true, "HitRate": 50, "Connection": "WMBlogLog.db" //sqlite只写数据库名就行 }, { "ConnId": "WMBLOG_MSSQL_1", "DBType": 1, "Enabled": false, "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ProviderName": "System.Data.SqlClient" }, {//SqlServer连接配置例子 "ConnId": "WMBLOG_MSSQL_2", "DBType": 1, "Enabled": false, "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ProviderName": "System.Data.SqlClient" }, {//Mysql连接配置例子 "ConnId": "WMBLOG_MYSQL", "DBType": 0, "Enabled": false, "Connection": "server=localhost;Database=blog;Uid=root;Pwd=root;Port=3306;Allow User Variables=True;" }, {//Oracle连接配置例子 "ConnId": "WMBLOG_ORACLE", "DBType": 3, "Enabled": false, "Connection": "Data Source=127.0.0.1/ops;User ID=OPS;Password=123456;Persist Security Info=True;Connection Timeout=60;" }, {//达梦连接配置例子 "ConnId": "WMBLOG_DM", "DBType": 5, "Enabled": false, "Connection": "Server=xxxxx:5236;User Id=xxxxx;PWD=xxxxx;SCHEMA=TESTDBA;" }, {//金仓连接配置例子 "ConnId": "WMBLOG_KDBNDP", "DBType": 6, "Enabled": false, "Connection": "Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1;" }],

二、使用方式

1、在model层创建一个实体类

/// <summary> /// 用户访问趋势日志 /// </summary> public class AccessTrendLog : RootEntityTkey<long> {     /// <summary>     /// 用户     /// </summary>     [SugarColumn(Length = 128, IsNullable = true)]     public string UserInfo { get; set; }
/// <summary> /// 次数 /// </summary> public int Count { get; set; }
/// <summary> /// 更新时间 /// </summary> public DateTime UpdateTime { get; set; } = DateTime.Now; }

2、系统封装了仓储层,并用泛型仓储基类来实现自动服务注入,所以这里不用任何操作

具体请看Blog.Core.Repository层下的BaseRepository.cs

3、是Service层写具体的业务逻辑,并抽离接口到IService层

服务层也封装了服务基类,不用做其他操作,直接写逻辑即可

public partial class AccessTrendLogServices : BaseServices<AccessTrendLog>, IAccessTrendLogServices {
}

4、最后在Controller层写接口,把服务注入即可,类似这样

readonly IModuleServices _moduleServices; readonly IUser _user;

public ModuleController(IModuleServices moduleServices, IUser user) { _moduleServices = moduleServices; _user = user; }



BCVP代码创新社
专注于 NetCore 相关技术栈的推广,致力于前后端之间的完全分离,从壹开始,让每一个程序员都能从这里学有所成。
 最新文章