From 8d7e62f8afeba6aeb93fc661030f210fcdd48ea4 Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Tue, 24 Mar 2026 09:59:30 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20SqlSugar=20=E6=B3=A8=E5=86=8C=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=20Scoped=20=E9=81=BF=E5=85=8D=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - ISqlSugarClient 注册为 Singleton - 多个请求共享同一个 SqlSugarScope 实例 - Task.WhenAll 并发查询时连接状态冲突 修复: - Singleton → Scoped - 每个 HTTP 请求独立的 SqlSugarScope 实例 - 避免跨请求共享连接对象 配合内存缓存层,双重保障: 1. 内存缓存:减少数据库查询次数 2. Scoped:隔离请求间的连接对象 --- AssetManager.Data/DatabaseExtensions.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AssetManager.Data/DatabaseExtensions.cs b/AssetManager.Data/DatabaseExtensions.cs index 76efdb2..e7e9784 100755 --- a/AssetManager.Data/DatabaseExtensions.cs +++ b/AssetManager.Data/DatabaseExtensions.cs @@ -8,9 +8,9 @@ public static class DatabaseExtensions { public static IServiceCollection AddDatabase(this IServiceCollection services) { - // 使用 Singleton 注册 SqlSugarScope(线程安全,内部使用 AsyncLocal) - // SqlSugarScope 设计上支持并发,会自动管理连接池 - services.AddSingleton(s => + // 使用 Scoped 注册,每个 HTTP 请求一个实例,避免并发冲突 + // SqlSugarScope 内部会自动管理连接池 + services.AddScoped(s => { return SqlSugarConfig.GetSqlSugarClient(); });