using SqlSugar;
using System;
using System.IO;
namespace ORM
{
public class DatabaseConfig
{
///
/// 数据库连接类型
///
public static DbType DbConnectionType => DbType.Sqlite;
///
/// SQLite 数据库文件路径
///
public static string DbConnectionString { get; private set; }
///
/// 数据租户Id
///
public static int TenantId { get; private set; }
///
/// 雪花算法DatacenterId,值范围:0至31
///
public static int SnowFlakeDatacenterId { get; private set; }
///
/// 雪花算法WorkID,值范围:0至31
///
public static int SnowFlakeWorkId { get; private set; }
static DatabaseConfig()
{
// 获取程序运行目录
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={dbPath};Version=3;";
}
///
/// 设置数据库连接字符串(可手动覆盖)
///
public static void SetDbConnection(string strConnection)
{
if (string.IsNullOrEmpty(strConnection))
{
throw new Exception("数据库连接字符串为空");
}
DbConnectionString = strConnection;
}
///
/// 设置数据租户Id
///
public static void SetTenant(int nTenantId)
{
if (nTenantId <= 10000)
{
throw new Exception("数据租户Id值需大于10000");
}
TenantId = nTenantId;
SetSnowFlake((nTenantId - 10000) % 1024);
}
///
/// 将指定数字转换为雪花算法DatacenterId和WorkID
///
private static void SetSnowFlake(int nSnowFlakeId)
{
if (nSnowFlakeId > 1023 || nSnowFlakeId < 0)
{
throw new Exception("雪花算法机器码值范围0至1023");
}
SnowFlakeDatacenterId = nSnowFlakeId >> 5;
SnowFlakeWorkId = nSnowFlakeId & 31;
}
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("连接数据库失败");
}
}
}
}