using System.Linq.Expressions;
using Microsoft.Extensions.Configuration;
using SqlSugar;
namespace SqlSugarFrameworkCore;
public class DbSettings
{
public const string AppOne = "AppOne";
public const string AppDevOne = "AppDevOne";
public const string AppThreeOne = "AppThreeOne";
public const string Oracle = "Oracle";
}
public enum DbInfo
{
MesOne = 1,
MesDevOne = 2,
MesThree = 3,
Oracle = 4,
}
public class LongSugarClient
{
public static LongSugarClient sugarInstance;
public static DbInfo curDbInfo;
public static Dictionary<DbInfo, LongSugarClient> sugarInstances = new Dictionary<DbInfo, LongSugarClient>();
public static readonly object sugarInstanceLock = new object(); public SqlSugarClient _db; private LongSugarClient(SqlSugarClient sqlSugarClient) { _db = sqlSugarClient; } public static LongSugarClient GetInstance(DbInfo dbInfo, IConfigurationSection dbConfigurationSection) { if (sugarInstances.ContainsKey(dbInfo)) { sugarInstances.TryGetValue(dbInfo, out LongSugarClient sugarInstance); return sugarInstance; } lock (sugarInstanceLock) { if (sugarInstances.ContainsKey(dbInfo)) { sugarInstances.TryGetValue(dbInfo, out LongSugarClient sugarInstance); return sugarInstance; } GetSugarClient(dbInfo, dbConfigurationSection); } return sugarInstance; } private static void GetSugarClient(DbInfo dbInfo, IConfigurationSection dbConfigurationSection) { if (dbInfo == DbInfo.MesOne) { string connectStr = dbConfigurationSection.GetSection(DbSettings.AppOne).Value ?? throw new ArgumentNullException($"{DbSettings.AppOne} is misstion"); CreateSugarClient(dbInfo, connectStr); } else if (dbInfo == DbInfo.MesDevOne) { string connectStr = dbConfigurationSection.GetSection(DbSettings.AppDevOne).Value ?? throw new ArgumentNullException($"{DbSettings.AppDevOne} is misstion"); CreateSugarClient(dbInfo, connectStr); } else if (dbInfo == DbInfo.MesThree) { string connectStr = dbConfigurationSection.GetSection(DbSettings.AppThreeOne).Value ?? throw new ArgumentNullException($"{DbSettings.AppThreeOne} is misstion"); CreateSugarClient(dbInfo, connectStr); } else if (dbInfo == DbInfo.Oracle) { string connectStr = dbConfigurationSection.GetSection(DbSettings.Oracle).Value ?? throw new ArgumentNullException($"{DbSettings.Oracle} is misstion"); CreateSugarClient(dbInfo, connectStr); } } private static void CreateSugarClient(DbInfo dbInfo, string connectStr) { SqlSugarClient sqlSugar = new SqlSugarClient( new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, ConnectionString = connectStr, IsAutoCloseConnection = true, }, db => { //单例参数配置,所有上下文生效 db.Aop.OnLogExecuting = (sql, pars) => { //打印日志 Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))); }; } ); sugarInstance = new LongSugarClient(sqlSugar); sugarInstances.Add(dbInfo, sugarInstance); } private DbInfo? GetCurrentDbInfo() { foreach (KeyValuePair<DbInfo, LongSugarClient> pair in sugarInstances) { if (pair.Value == this) { return pair.Key; } } return null; } public void Excute() { dynamic dynamic = this._db.SqlQueryable<dynamic>("select count(*) as count FROM [dbo].[MBO_EqInfo]").First(); System.Console.WriteLine(dynamic.ToSqlValue); }
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战