框架高度集成国产优秀ORM——Sqlsugar,支持常规企业级所有的数据库操作场景:
1、全部兼容国产数据库;2、支持同时连接操作多种数据库,且相互之间不受影响;3、支持事务;4、支持主从分离模式;5、支持主备模式(主库挂了,会自动切换到备用库);6、详细的Sql操作日志;
一、相关的依赖注入配置
代码语言:javascript复制builder.Services.AddSqlsugarSetup();
相关参数设置
代码语言:javascript复制//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层创建一个实体类
代码语言:javascript复制/// <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层
服务层也封装了服务基类,不用做其他操作,直接写逻辑即可
代码语言:javascript复制public partial class AccessTrendLogServices : BaseServices<AccessTrendLog>, IAccessTrendLogServices
{
}
4、最后在Controller层写接口,把服务注入即可,类似这样
代码语言:javascript复制readonly IModuleServices _moduleServices;
readonly IUser _user;
public ModuleController(IModuleServices moduleServices, IUser user)
{
_moduleServices = moduleServices;
_user = user;
}