欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 采用SqlSugarClient创建数据库实例引发的异步调用问题

采用SqlSugarClient创建数据库实例引发的异步调用问题

2025/5/15 5:48:29 来源:https://blog.csdn.net/gc_2299/article/details/147806472  浏览:    关键词:采用SqlSugarClient创建数据库实例引发的异步调用问题

  基于SqlSugar编写的多个WebApi接口,项目初始化时采用单例模式注册SqlSugarClient实例对象,前端页面采用layui布局,并在一个按钮事件中通过Ajax连续调用多个WebApi接口获取数据。实际运行时点击按钮会随机报下面几种错误:

ExecuteReader requires an open and available Connection,The connection's current state is closed
Invalid operation.The connection is closed
There is already an open DataReader associated with this connection which must be close first

  搜索上述错误信息,发现和异步调用有关。Ajax调用WebApi默认采用异步方式,同一个函数中先后用Ajax调用WebApi接口,后台都是使用同一个SqlSugarClient实例,所以才会出现上述错误。下图是DeepSeek给出的SqlSugar中SqlSugarClient和SqlSugarScope的区别,同时从参考文献1中可以看到SqlSugarClient不适合单例模式,而是适合每次请求new一个新对象,单例模式更适合使用SqlSugarScope。
在这里插入图片描述
  要解决上述问题可以采用以下三种方法:
  1)Ajax调用WebApi时增加设置async:false,取消异步调用,但多终端连接时也可能会出问题;
  2)将SqlSugarClient换为SqlSugarScope;
   3)参照SqlSugar官网文档采用原生模式使用SqlSugarClient。

  第三条没有试过,不确定是否能解决并发问题。由于没有性能上的要求,我是采用第二种方式简单粗暴的解决问题。

参考文献:
[1]https://www.donet5.com/Doc/1/1180

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词