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)
|
||||
{
|
||||
// SqlSugarScope 是线程安全的,内部使用 AsyncLocal 隔离上下文
|
||||
// 使用 Singleton 注册,整个应用共享一个实例
|
||||
services.AddSingleton<ISqlSugarClient>(s =>
|
||||
// SqlSugarClient 超高性能模式:每次请求创建新实例
|
||||
// Scoped 确保:同一 HTTP 请求内复用,不同请求隔离
|
||||
services.AddScoped<ISqlSugarClient>(s =>
|
||||
{
|
||||
return SqlSugarConfig.GetSqlSugarScope();
|
||||
return SqlSugarConfig.GetSqlSugarClient();
|
||||
});
|
||||
|
||||
services.AddScoped<DatabaseService>();
|
||||
|
||||
@ -16,7 +16,9 @@ public static class SqlSugarConfig
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 SqlSugarClient 实例(用于后台任务,每次创建新实例)
|
||||
/// 获取 SqlSugarClient 实例(超高性能模式)
|
||||
/// 每次 new 创建实例,IsAutoCloseConnection=true 自动关闭连接
|
||||
/// 适合:DI Scoped 注入、后台任务、Task.Run 场景
|
||||
/// </summary>
|
||||
public static ISqlSugarClient GetSqlSugarClient()
|
||||
{
|
||||
@ -27,44 +29,13 @@ public static class SqlSugarConfig
|
||||
|
||||
var connectionString = GetConnectionString();
|
||||
|
||||
// 使用 SqlSugarClient(非 Scope),每次创建独立实例
|
||||
// 适合后台任务、Task.Run 场景
|
||||
// SqlSugarClient 超高性能模式
|
||||
// 每次创建新实例,IsAutoCloseConnection=true 确保连接自动关闭
|
||||
return new SqlSugarClient(new ConnectionConfig()
|
||||
{
|
||||
ConnectionString = connectionString,
|
||||
DbType = DbType.MySql,
|
||||
IsAutoCloseConnection = 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,
|
||||
IsAutoCloseConnection = true, // 必须为 true
|
||||
InitKeyType = InitKeyType.Attribute,
|
||||
ConfigureExternalServices = new ConfigureExternalServices
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user