原生模式提示:MySqlConnection 已经被使用,改成单例又报超时!!!!!! 返回

SqlSugar 处理完成
4 364
该叫什么 Mr.An 发布于2025/8/27
悬赏:0 飞吻

单例模式执行存储过程,换了N中方法了死活不行,单库

报错 The Command Timeout expired before the operation completed


        public static void SqlSugarInit(this WebApplicationBuilder builder)

        {

            string ConnStr = "ConnectionStrings";

            var ConnectionStrings =;


            string _dbType = ;

            string _isEncrypt = ;

            string _connectionString = ;


            var dbType = DbType.MySql;

            if (_dbType.Equals("SqlServer"))

                dbType = DbType.SqlServer;


            if (_isEncrypt.ToLower().Equals("true"))

                _connectionString = _connectionString.DesDecrypt();


            ICacheService myCache = new HttpRuntimeCache();

            builder.Services.AddSingleton<ISqlSugarClient>(s =>

            {

                SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()

                {

                    ConfigId = "0",

                    DbType = dbType,

                    ConnectionString = _connectionString,

                    IsAutoCloseConnection = true,

                    ConfigureExternalServices = new ConfigureExternalServices() { DataInfoCacheService = myCache }

                },

               db =>

               {

                   db.Ado.CommandTimeOut = 30;

#if DEBUG

                   db.Aop.OnLogExecuting = (sql, pars) =>

                   {

                       //获取原生SQL推荐  性能OK

                       var SqlStr = UtilMethods.GetNativeSql(sql, pars);


                       //获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用

                       //Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))

                   };

#endif

               });

                return sqlSugar;

            });

        }



存储过程块:


            var lastStr = StrUtils.RandomStr(Len: 4, Type: 2) + "-del";

            var _db = db as SqlSugarScope; // 这里改成  var _db=db.CopyNew()  也是报超时

            var result = _db.UseTran(() =>

            {

                var row = _db.Updateable<SiteEntity>().SetColumns(it => new SiteEntity

                {

                    Domain = it.Domain + $"_{lastStr}",

                    IsDel = true

                }).Where(it => it.ID == ID).ExecuteCommand();


                if (row <= 0)

                    throw new Exception("修改失败").WriteLog();


                if (row > 0)

                {

                    _ = _db.Deleteable<SiteLinkEntity>().Where(it => it.SID == ID).ExecuteCommand();

                    _ = _db.Deleteable<SiteUpdateEntity>().Where(it => it.SID == ID && it.State == (int)SiteUpdateStates.待审核).ExecuteCommand();

                }

            });

            if (!result.IsSuccess)

                _db.RollbackTran();

            return result.IsSuccess;


然后又改成下边这种方式:

            var lastStr = StrUtils.RandomStr(Len: 4, Type: 2) + "-del";

            try

            {

                db.Ado.BeginTran();  //这里  var _db=db.CopyNew()  、 db.BeginTran();  都尝试过了,死活超时!!!!

                var row = db.Updateable<SiteEntity>().SetColumns(it => new SiteEntity

                {

                    Domain = it.Domain + $"_{lastStr}",

                    IsDel = true

                }).Where(it => it.ID == ID).ExecuteCommand();


                if (row <= 0)

                    throw new Exception("修改失败").WriteLog();


                if (row > 0)

                {

                    db.Deleteable<SiteLinkEntity>().Where(it => it.SID == ID).ExecuteCommand();

                    db.Deleteable<SiteUpdateEntity>().Where(it => it.SID == ID && it.State == (int)SiteUpdateStates.待审核).ExecuteCommand();

                }

                db.Ado.CommitTran();

                return true;

            }

            catch (Exception ex)

            {

                db.Ado.RollbackTran();

            }

            return false;


热忱回答4

  • Mr.An Mr.An VIP0
    2025/8/27

    切换为 MySqlConnector 2.1.0 也是同样的问题! 

    0 回复
  • Mr.An Mr.An VIP0
    2025/8/27

    以前好几个项目用着都没问题,这个新项目使用的是net8.0,是哪里配置有问题吗?

    0 回复
  • fate sta fate sta VIP0
    2025/8/27
    • SQL 语句本身执行很慢

      • 表没有索引 / 索引失效

      • join 过多、子查询复杂

      • where 条件没有利用索引

      • 大量数据需要扫描

    • 数据库压力大

      • 并发太高

      • 锁等待、事务未提交


    0 回复
  • Mr.An Mr.An VIP0
    2025/8/27

    @fate sta:小姐姐,搞定了!!! 妈耶! 是因为前期使用错了方法,导致数据库一直死锁!!! 重启数据库好了!!!!


    谢谢小姐姐

    0 回复