You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
4.4 KiB
112 lines
4.4 KiB
3 weeks ago
|
using Microsoft.Extensions.Logging;
|
||
|
using SqlSugar;
|
||
|
using System;
|
||
|
using System.Linq;
|
||
|
namespace ReZero.SuperAPI
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Get rezero db
|
||
|
/// </summary>
|
||
|
public class ZeroDb
|
||
|
{
|
||
|
public static ISqlSugarClient Db =>new SqlSugarClient(UtilMethods.CopyConfig( App.PreStartupDb!.CurrentConnectionConfig));
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// Represents the application's main entry point and provides access to essential services and resources.
|
||
|
/// </summary>
|
||
|
internal class App
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Gets or sets the application's service provider, allowing access to registered services.
|
||
|
/// </summary>
|
||
|
internal static ApplicationServiceProvider? ServiceProvider { get; set; }
|
||
|
/// <summary>
|
||
|
/// Represents a database connection object used before service startup.
|
||
|
/// </summary>
|
||
|
internal static ISqlSugarClient? PreStartupDb { get; set; }
|
||
|
/// <summary>
|
||
|
/// Gets the instance of the SqlSugar client for database operations.
|
||
|
/// </summary>
|
||
|
/// <remarks>
|
||
|
/// This property provides convenient access to the configured SqlSugar client for database operations.
|
||
|
/// </remarks>
|
||
|
internal static ISqlSugarClient Db { get => ServiceProvider!.GetService<DatabaseContext>().SugarClient; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// Obtain the database operation object based on the database ID
|
||
|
/// </summary>
|
||
|
/// <param name="dbId"></param>
|
||
|
/// <returns></returns>
|
||
|
internal static SqlSugarClient? GetDbById(long dbId)
|
||
|
{
|
||
|
var rootDb = App.Db;
|
||
|
var zeroDatabaseInfo = rootDb.Queryable<ZeroDatabaseInfo>().Where(it => it.Id == dbId).First();
|
||
|
SqlSugarClient? db = null;
|
||
|
if (zeroDatabaseInfo != null)
|
||
|
db = GetSqlSugarClientByDatabaseInfo(zeroDatabaseInfo);
|
||
|
return db;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Obtain the database operation object based on the table ID
|
||
|
/// </summary>
|
||
|
/// <param name="tableId"></param>
|
||
|
/// <returns></returns>
|
||
|
internal static SqlSugarClient? GetDbTableId(long tableId)
|
||
|
{
|
||
|
var rootDb = App.Db;
|
||
|
var dbId = CacheManager<ZeroEntityInfo>.Instance.GetList().Where(it => it.Id == tableId).First()?.DataBaseId;
|
||
|
var zeroDatabaseInfo =CacheManager<ZeroDatabaseInfo>.Instance.GetList().Where(it => it.Id == dbId).First();
|
||
|
zeroDatabaseInfo = rootDb.Utilities.TranslateCopy(zeroDatabaseInfo);
|
||
|
SqlSugarClient? db = null;
|
||
|
if (zeroDatabaseInfo != null)
|
||
|
db = GetSqlSugarClientByDatabaseInfo(zeroDatabaseInfo);
|
||
|
return db;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Obtain the database operation object based on the ZeroDatabaseInfo
|
||
|
/// </summary>
|
||
|
/// <param name="zeroDatabaseInfo"></param>
|
||
|
/// <returns></returns>
|
||
|
private static SqlSugarClient GetSqlSugarClientByDatabaseInfo(ZeroDatabaseInfo zeroDatabaseInfo)
|
||
|
{
|
||
|
return new SqlSugarClient(new ConnectionConfig()
|
||
|
{
|
||
|
ConfigId=int.MaxValue,
|
||
|
ConnectionString = zeroDatabaseInfo.Connection,
|
||
|
DbType = zeroDatabaseInfo.DbType,
|
||
|
IsAutoCloseConnection = true,
|
||
|
InitKeyType = InitKeyType.Attribute,
|
||
|
MoreSettings = new ConnMoreSettings
|
||
|
{
|
||
|
SqlServerCodeFirstNvarchar = true,
|
||
|
SqliteCodeFirstEnableDropColumn = true,
|
||
|
EnableCodeFirstUpdatePrecision = true,
|
||
|
IsAutoToUpper=false,
|
||
|
PgSqlIsAutoToLower=false,
|
||
|
PgSqlIsAutoToLowerCodeFirst=false,
|
||
|
EnableOracleIdentity=true
|
||
|
}
|
||
|
},
|
||
|
db =>
|
||
|
{
|
||
|
db.Aop.OnLogExecuting = (s, p) =>
|
||
|
{
|
||
|
ReZero.DependencyInjection.DependencyResolver.GetLogger().LogInformation(UtilMethods.GetNativeSql(s, p));
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// Gets the language used by the SuperAPI module.
|
||
|
/// </summary>
|
||
|
/// <returns>The language.</returns>
|
||
|
internal static Language Language
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return SuperAPIModule._apiOptions!.UiOptions!.UiLanguage;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|