首页 新闻 会员 周边 捐助

数据库连接关闭

0
[已解决问题] 解决于 2022-06-16 10:11

有两个方法,不分前后的执行(几乎同时),都和数据库操作有关,这是方法中用到的一个工具类方法:

public static IEnumerable<T> Query<T>(string sql, object param = null, IDbTransaction tran = null)
{
Open();
var list = DB.Query<T>(sql, param, tran);
Close(tran);
return list;
}

导致两个方法执行的时候,前一个有可能会把后一个方法的连接关闭(第一个方法执行成功了,第二个方法也用到这个方法,把第二个连接给关闭了,导致报错)

信海哥的主页 信海哥 | 菜鸟二级 | 园豆:222
提问于:2022-05-30 14:39
< >
分享
最佳答案
0

前一个有可能会把后一个方法的连接关闭

你是用了单例了吗

奖励园豆:5
talentzemin | 小虾三级 |园豆:775 | 2022-05-30 14:53

是的

信海哥 | 园豆:222 (菜鸟二级) | 2022-05-30 15:34

@信海哥: 用单例肯定会有这样的冲突啊,两个(多个)线程同时修改一个对象的属性(比如open状态,commandText等)。

改用transit 或者 scope注入DBContext(如果使用了依赖注入)

talentzemin | 园豆:775 (小虾三级) | 2022-05-30 15:52

@luzemin: 用的Dapper 改用transit (这个是什么啊)

信海哥 | 园豆:222 (菜鸟二级) | 2022-05-30 16:09

@信海哥: 我说的是选择适合的依赖注入时候的生命周期

transit 是手误,transit -->Transient

 

https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection#service-lifetimes

talentzemin | 园豆:775 (小虾三级) | 2022-05-30 16:12

@luzemin: 我用的工具类的形式(静态类),没用注入的方式

信海哥 | 园豆:222 (菜鸟二级) | 2022-05-30 16:15

@信海哥: 那就改为每次new DB context

talentzemin | 园豆:775 (小虾三级) | 2022-05-30 16:17

@luzemin: 好的大哥,谢谢大哥(抱拳)

信海哥 | 园豆:222 (菜鸟二级) | 2022-05-30 16:18

@luzemin: 前端数据 {name:"",age:20,data:[] } 后端 用JObject
报错 Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Newtonsoft.Json.Linq.JArray'.
这个是什么问题

信海哥 | 园豆:222 (菜鸟二级) | 2022-05-30 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册