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

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

csharp 复制代码
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

相关推荐
伍华聪21 天前
在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持
sqlsugar·mongodb数据库·eav模型设计
三天不学习3 个月前
【并发控制、更新、版本控制】.NET开源ORM框架 SqlSugar 系列
开源·.net·orm·sqlsugar
三天不学习4 个月前
【Delete 删除数据语法合集】.NET开源ORM框架 SqlSugar 系列
后端·开源·.net·orm·微软技术·sqlsugar
三天不学习4 个月前
【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列
数据库·后端·c#·.net·orm·sqlsugar
梁萌4 个月前
SqlSugar-文章目录
orm·sqlsugar
三天不学习4 个月前
【SqlSugar雪花ID常见问题】.NET开源ORM框架 SqlSugar 系列
sql·.net·数据·sqlsugar·雪花id
三天不学习5 个月前
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
数据库·.net·orm·微软技术·sqlsugar
三天不学习5 个月前
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
后端·c#·.net·orm·sqlsugar
三天不学习5 个月前
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
数据库·.net·orm·sqlsugar