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("连接数据库失败"); } } } }