refactor: 统一使用 SqlSugarClient(官方推荐高性能模式)
官方建议: - SqlSugarClient 超高性能模式 - 每次 new 创建实例 - IsAutoCloseConnection=true 自动关闭连接 - 适合 DI Scoped 注入、后台任务、Task.Run 场景 修改: 1. DI 注入改为 Scoped(每次 HTTP 请求一个实例) 2. 移除 SqlSugarScope,统一使用 SqlSugarClient 3. 后台任务创建新实例(已实现) 4. MySQL 连接池复用底层 TCP 连接 优点: - 性能更好 - 代码更简单 - 符合官方最佳实践
This commit is contained in:
parent
dc50dfc917
commit
650d59aaff
@ -8,11 +8,11 @@ public static class DatabaseExtensions
|
|||||||
{
|
{
|
||||||
public static IServiceCollection AddDatabase(this IServiceCollection services)
|
public static IServiceCollection AddDatabase(this IServiceCollection services)
|
||||||
{
|
{
|
||||||
// SqlSugarScope 是线程安全的,内部使用 AsyncLocal 隔离上下文
|
// SqlSugarClient 超高性能模式:每次请求创建新实例
|
||||||
// 使用 Singleton 注册,整个应用共享一个实例
|
// Scoped 确保:同一 HTTP 请求内复用,不同请求隔离
|
||||||
services.AddSingleton<ISqlSugarClient>(s =>
|
services.AddScoped<ISqlSugarClient>(s =>
|
||||||
{
|
{
|
||||||
return SqlSugarConfig.GetSqlSugarScope();
|
return SqlSugarConfig.GetSqlSugarClient();
|
||||||
});
|
});
|
||||||
|
|
||||||
services.AddScoped<DatabaseService>();
|
services.AddScoped<DatabaseService>();
|
||||||
|
|||||||
@ -16,7 +16,9 @@ public static class SqlSugarConfig
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取 SqlSugarClient 实例(用于后台任务,每次创建新实例)
|
/// 获取 SqlSugarClient 实例(超高性能模式)
|
||||||
|
/// 每次 new 创建实例,IsAutoCloseConnection=true 自动关闭连接
|
||||||
|
/// 适合:DI Scoped 注入、后台任务、Task.Run 场景
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static ISqlSugarClient GetSqlSugarClient()
|
public static ISqlSugarClient GetSqlSugarClient()
|
||||||
{
|
{
|
||||||
@ -27,44 +29,13 @@ public static class SqlSugarConfig
|
|||||||
|
|
||||||
var connectionString = GetConnectionString();
|
var connectionString = GetConnectionString();
|
||||||
|
|
||||||
// 使用 SqlSugarClient(非 Scope),每次创建独立实例
|
// SqlSugarClient 超高性能模式
|
||||||
// 适合后台任务、Task.Run 场景
|
// 每次创建新实例,IsAutoCloseConnection=true 确保连接自动关闭
|
||||||
return new SqlSugarClient(new ConnectionConfig()
|
return new SqlSugarClient(new ConnectionConfig()
|
||||||
{
|
{
|
||||||
ConnectionString = connectionString,
|
ConnectionString = connectionString,
|
||||||
DbType = DbType.MySql,
|
DbType = DbType.MySql,
|
||||||
IsAutoCloseConnection = true,
|
IsAutoCloseConnection = true, // 必须为 true
|
||||||
InitKeyType = InitKeyType.Attribute,
|
|
||||||
ConfigureExternalServices = new ConfigureExternalServices
|
|
||||||
{
|
|
||||||
EntityService = (property, column) =>
|
|
||||||
{
|
|
||||||
if (property.PropertyType == typeof(DateTime))
|
|
||||||
{
|
|
||||||
column.DataType = "datetime(3)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取 SqlSugarScope 实例(用于 DI 注入,Singleton/Scoped)
|
|
||||||
/// </summary>
|
|
||||||
public static ISqlSugarClient GetSqlSugarScope()
|
|
||||||
{
|
|
||||||
if (_configuration == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("SqlSugarConfig has not been initialized. Call Initialize() first.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var connectionString = GetConnectionString();
|
|
||||||
|
|
||||||
return new SqlSugarScope(new ConnectionConfig()
|
|
||||||
{
|
|
||||||
ConnectionString = connectionString,
|
|
||||||
DbType = DbType.MySql,
|
|
||||||
IsAutoCloseConnection = true,
|
|
||||||
InitKeyType = InitKeyType.Attribute,
|
InitKeyType = InitKeyType.Attribute,
|
||||||
ConfigureExternalServices = new ConfigureExternalServices
|
ConfigureExternalServices = new ConfigureExternalServices
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user