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.
78 lines
3.3 KiB
78 lines
3.3 KiB
using Microsoft.Extensions.Logging; |
|
using SqlSugar; |
|
using System; |
|
|
|
namespace ReZero.SuperAPI |
|
{ |
|
/// <summary> |
|
/// Represents a database context for handling database operations using SqlSugar. |
|
/// </summary> |
|
public class DatabaseContext |
|
{ |
|
/// <summary> |
|
/// Gets the SqlSugar client instance for performing database operations. |
|
/// </summary> |
|
public ISqlSugarClient SugarClient { get; private set; } |
|
|
|
/// <summary> |
|
/// Initializes a new instance of the DatabaseContext class with the provided database connection configuration. |
|
/// </summary> |
|
/// <param name="connectionConfig">Database connection configuration.</param> |
|
public DatabaseContext(SuperAPIConnectionConfig rezeroConnectionConfig) |
|
{ |
|
var connectionConfig = new ConnectionConfig() |
|
{ |
|
DbType = rezeroConnectionConfig.DbType, |
|
ConnectionString = rezeroConnectionConfig.ConnectionString, |
|
IsAutoCloseConnection = true, |
|
MoreSettings=new ConnMoreSettings() |
|
{ |
|
SqlServerCodeFirstNvarchar=true |
|
} |
|
}; |
|
|
|
InitializeExternalServices(connectionConfig); |
|
|
|
ConfigureExternalServices(connectionConfig); |
|
|
|
// Create a new SqlSugar client instance using the provided connection configuration. |
|
SugarClient = new SqlSugarClient(connectionConfig, db => |
|
{ |
|
db.QueryFilter.AddTableFilter<IDeleted>(it => it.IsDeleted == false); |
|
db.Aop.OnLogExecuting = (s, p) => |
|
ReZero.DependencyInjection.DependencyResolver.GetLogger().LogInformation(UtilMethods.GetNativeSql(s, p)); |
|
}); |
|
|
|
|
|
} |
|
|
|
/// <summary> |
|
/// Configures external services for the provided database connection configuration. |
|
/// </summary> |
|
/// <param name="connectionConfig">Database connection configuration.</param> |
|
private static void ConfigureExternalServices(ConnectionConfig connectionConfig) |
|
{ |
|
connectionConfig.ConfigureExternalServices.EntityService = (x, p) => |
|
{ |
|
// Convert the database column name to snake case. |
|
p.DbColumnName = UtilMethods.ToUnderLine(p.DbColumnName); |
|
}; |
|
connectionConfig.ConfigureExternalServices.EntityNameService = (x, p) => |
|
{ |
|
// Convert the database table name to snake case. |
|
p.DbTableName = UtilMethods.ToUnderLine(p.DbTableName); |
|
}; |
|
} |
|
|
|
/// <summary> |
|
/// Initializes external services for the provided database connection configuration. |
|
/// </summary> |
|
/// <param name="connectionConfig">Database connection configuration.</param> |
|
private static void InitializeExternalServices(ConnectionConfig connectionConfig) |
|
{ |
|
// Adds comments to explain the purpose of the method. |
|
// Sets the ConfigureExternalServices property of the provided connection configuration to a new instance of ConfigureExternalServices if it is null. |
|
connectionConfig.ConfigureExternalServices = connectionConfig.ConfigureExternalServices ?? new ConfigureExternalServices(); |
|
} |
|
} |
|
} |