//------------------------------------------------------------------------------ // 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 // 此代码版权(除特别声明外的代码)归作者本人Diego所有 // 源代码使用协议遵循本仓库的开源协议及附加协议 // Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway // Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway // 使用文档:https://thingsgateway.cn/ // QQ群:605534569 //------------------------------------------------------------------------------ using Microsoft.Extensions.DependencyInjection; using ThingsGateway.Extension; using ThingsGateway.NewLife.Log; namespace ThingsGateway.DB; /// /// 数据库上下文对象 /// public static class DbContext { /// /// SqlSugar 数据库实例 /// private static readonly SqlSugarClient Db; /// /// 读取配置文件中的 ConnectionStrings:Sqlsugar 配置节点 /// public static readonly SqlSugarOptions DbConfigs; /// /// 获取数据库连接 /// /// public static SqlSugarClient GetDB() { return Db.GetConnectionWithAttr().CopyNew(); } /// /// 获取数据库连接 /// /// public static SqlSugarClient GetDB() { return Db; } /// /// 获取数据库连接 /// /// public static SqlSugarClient GetDB(string tenant) { return Db.GetConnection(tenant).CopyNew();//获取数据库对象 } private static ISugarAopService sugarAopService; private static ISugarAopService SugarAopService { get { if (sugarAopService == null) { sugarAopService = App.RootServices.GetService(); } return sugarAopService; } } static DbContext() { // 配置映射 DbConfigs = App.GetOptions(); DbConfigs = App.RootServices.GetService().Config(DbConfigs); Db = new(DbConfigs.Select(a => (ConnectionConfig)a).ToList(), db => { DbConfigs.ForEach(it => { var sqlsugarScope = db.GetConnection(it.ConfigId);//获取当前库 MoreSetting(sqlsugarScope);//更多设置 SugarAopService.AopSetting(sqlsugarScope, it.IsShowSql);//aop配置 } ); }); } /// /// 实体更多配置 /// /// private static void MoreSetting(SqlSugarProvider db) { db.CurrentConnectionConfig.MoreSettings = new ConnMoreSettings { SqlServerCodeFirstNvarchar = true, //设置默认nvarchar IsNoReadXmlDescription = true }; } /// public static void WriteErrorLogWithSql(string msg) { XTrace.Log.Error("【Sql执行错误时间】:" + DateTime.Now.ToDefaultDateTimeFormat()); XTrace.Log.Error("【Sql语句】:" + msg + Environment.NewLine); } /// public static void WriteLog(string msg) { Console.WriteLine("【库操作】:" + msg + Environment.NewLine); } /// public static void WriteLogWithSql(string msg) { Console.WriteLine("【Sql执行时间】:" + DateTime.Now.ToDefaultDateTimeFormat()); Console.WriteLine("【Sql语句】:" + msg + Environment.NewLine); } public static async Task BulkCopyAsync(this SqlSugarClient db, IEnumerable datas, int size) where TITEM : class, new() { switch (db.CurrentConnectionConfig.DbType) { case DbType.MySql: case DbType.SqlServer: case DbType.Sqlite: case DbType.Oracle: case DbType.PostgreSQL: case DbType.Dm: case DbType.MySqlConnector: case DbType.Kdbndp: await db.Fastest().PageSize(size).BulkCopyAsync(datas).ConfigureAwait(false); break; default: await db.Insertable(datas is IReadOnlyCollection values ? values : datas.ToList()).PageSize(size).ExecuteCommandAsync().ConfigureAwait(false); break; } } public static async Task BulkUpdateAsync(this SqlSugarClient db, IEnumerable datas, int size) where TITEM : class, new() { switch (db.CurrentConnectionConfig.DbType) { case DbType.MySql: case DbType.SqlServer: case DbType.Sqlite: case DbType.Oracle: case DbType.PostgreSQL: case DbType.Dm: case DbType.MySqlConnector: case DbType.Kdbndp: await db.Fastest().PageSize(size).BulkUpdateAsync(datas).ConfigureAwait(false); break; default: await db.Updateable(datas is IReadOnlyCollection values ? values : datas.ToList()).PageSize(size).ExecuteCommandAsync().ConfigureAwait(false); break; } } }