框架优化
This commit is contained in:
@@ -1,97 +1,132 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace ORM
|
||||
{
|
||||
public static class DatabaseConfig
|
||||
public class DatabaseConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// 当前数据库类型
|
||||
/// 数据库连接类型
|
||||
/// </summary>
|
||||
public static DbType DbConnectionType { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据库连接字符串
|
||||
/// SQLite 数据库文件路径
|
||||
/// </summary>
|
||||
public static string DbConnectionString { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 默认 SQLite 文件路径(仅记录,不自动启用)
|
||||
/// </summary>
|
||||
public static string DefaultDbFilePath { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 租户 Id
|
||||
/// 数据租户Id
|
||||
/// </summary>
|
||||
public static int TenantId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 雪花算法DatacenterId,值范围:0至31
|
||||
/// </summary>
|
||||
public static int SnowFlakeDatacenterId { get; private set; }
|
||||
public static int SnowFlakeWorkId { get; private set; }
|
||||
|
||||
static DatabaseConfig()
|
||||
{
|
||||
InitDefaultDbPath(); // 只生成路径,不指定 DB 类型/连接
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成默认 DB 路径 EXE目录/SQLDB/Data.db
|
||||
/// 雪花算法WorkID,值范围:0至31
|
||||
/// </summary>
|
||||
private static void InitDefaultDbPath()
|
||||
{
|
||||
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
|
||||
public static int SnowFlakeWorkId { get; private set; }
|
||||
|
||||
#region 不同数据库初始化方法
|
||||
private static void InitSqlite()
|
||||
{
|
||||
DbConnectionType = DbType.Sqlite;
|
||||
// 获取程序运行目录
|
||||
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
|
||||
// 确保 SQLDB 文件夹存在
|
||||
string folder = Path.Combine(baseDir, "SQLDB");
|
||||
if (!Directory.Exists(folder))
|
||||
Directory.CreateDirectory(folder);
|
||||
|
||||
DefaultDbFilePath = Path.Combine(folder, "Data.db");
|
||||
// 拼接数据库文件路径
|
||||
string DBPath = Path.Combine(folder, "SQL.db");
|
||||
DbConnectionString = $"Data Source={DBPath};Version=3;";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 手动设置数据库连接
|
||||
/// </summary>
|
||||
public static void SetConnection(string conn, DbType dbType)
|
||||
private static void InitMySql(string Server, int Port, string Database, string Uid,string Pwd)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(conn))
|
||||
throw new Exception("数据库连接字符串为空");
|
||||
|
||||
DbConnectionString = conn;
|
||||
DbConnectionType = dbType;
|
||||
DbConnectionType = DbType.MySql;
|
||||
DbConnectionString =
|
||||
$"Server={Server};Port={Port};Database={Database};Uid={Uid};Pwd={Pwd};";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 如果未 SetConnection,默认使用 SQLite + 默认路径
|
||||
/// </summary>
|
||||
public static void EnsureConnection()
|
||||
private static void InitSqlServer(string server,int port,string database,string user,string password)
|
||||
{
|
||||
if (string.IsNullOrEmpty(DbConnectionString))
|
||||
DbConnectionType = DbType.SqlServer;
|
||||
|
||||
DbConnectionString =
|
||||
$"Data Source={server},{port};Initial Catalog={database};user={user};Password={password};";
|
||||
}
|
||||
private static void InitSqlServerLocalDb()
|
||||
{
|
||||
DbConnectionType = DbType.SqlServer;
|
||||
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
|
||||
// 确保 SQLDB 文件夹存在
|
||||
string folder = Path.Combine(baseDir, "SQLDB");
|
||||
if (!Directory.Exists(folder))
|
||||
Directory.CreateDirectory(folder);
|
||||
|
||||
// 拼接数据库文件路径
|
||||
string DBPath = Path.Combine(folder, "SQL.db");
|
||||
DbConnectionString =$@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog={DBPath};Integrated Security=True;";
|
||||
}
|
||||
#endregion
|
||||
/// <summary>
|
||||
/// 设置数据库连接字符串(可手动覆盖)
|
||||
/// </summary>
|
||||
public static void SetDbConnection(string strConnection)
|
||||
{
|
||||
if (string.IsNullOrEmpty(strConnection))
|
||||
{
|
||||
DbConnectionString = $"Data Source={DefaultDbFilePath};";
|
||||
DbConnectionType = DbType.Sqlite;
|
||||
throw new Exception("数据库连接字符串为空");
|
||||
}
|
||||
DbConnectionString = strConnection;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置租户并计算雪花算法节点
|
||||
/// 设置数据租户Id
|
||||
/// </summary>
|
||||
public static void SetTenant(int tenantId)
|
||||
public static void SetTenant(int nTenantId)
|
||||
{
|
||||
if (tenantId <= 10000)
|
||||
if (nTenantId <= 10000)
|
||||
{
|
||||
throw new Exception("数据租户Id值需大于10000");
|
||||
}
|
||||
TenantId = nTenantId;
|
||||
SetSnowFlake((nTenantId - 10000) % 1024);
|
||||
}
|
||||
|
||||
TenantId = tenantId;
|
||||
|
||||
int snowId = (tenantId - 10000) % 1024;
|
||||
|
||||
if (snowId is < 0 or > 1023)
|
||||
/// <summary>
|
||||
/// 将指定数字转换为雪花算法DatacenterId和WorkID
|
||||
/// </summary>
|
||||
private static void SetSnowFlake(int nSnowFlakeId)
|
||||
{
|
||||
if (nSnowFlakeId > 1023 || nSnowFlakeId < 0)
|
||||
{
|
||||
throw new Exception("雪花算法机器码值范围0至1023");
|
||||
|
||||
SnowFlakeDatacenterId = snowId >> 5;
|
||||
SnowFlakeWorkId = snowId & 31;
|
||||
}
|
||||
SnowFlakeDatacenterId = nSnowFlakeId >> 5;
|
||||
SnowFlakeWorkId = nSnowFlakeId & 31;
|
||||
}
|
||||
/// <summary>
|
||||
/// 检测数据库连接
|
||||
/// </summary>
|
||||
public static void CreateDatabaseAndCheckConnection(bool createDatabase = false, bool checkConnection = false)
|
||||
{
|
||||
//数据库不存在则创建数据库
|
||||
if (createDatabase)
|
||||
{
|
||||
SqlSugarContext.DbContext.DbMaintenance.CreateDatabase();
|
||||
}
|
||||
// 检查数据库连接
|
||||
if (checkConnection && !SqlSugarContext.DbContext.Ado.IsValidConnection())
|
||||
{
|
||||
throw new Exception("连接数据库失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user