首页 新闻 会员 周边 捐助

MyDbContext单例问题

0
悬赏园豆:30 [已解决问题] 解决于 2020-07-30 16:47

并发时会报错,该如何解决??

阿伟你怎么了的主页 阿伟你怎么了 | 初学一级 | 园豆:13
提问于:2020-07-25 14:30
< >
分享
最佳答案
0

统一回复:出现该问题的原因已找到,DbContext实例是单一实例,但我却用了多个线程在此单例上操作数据,由于DbContext在操作数据后会调用SaveChanges方法,该方法会和当前上下文一一对应,在多线程时,这里就会报错。
解决方法:没用锁,试过用连接池,感觉挺耗性能,所以将插入操作分离开了,用了RabbitMQ。

阿伟你怎么了 | 初学一级 |园豆:13 | 2020-07-30 16:45
其他回答(3)
0

你使用的connecttion对象是只有一个,多个线程使用时,如果前面一个线程关闭了这个connection,其他线程在使用这个connecttion对象就会报错,所以你这个并发的地方每个线程都需要使用一个connection对象,保证connecttion对象的线程安全
可以参考这个链接
https://www.cnblogs.com/jeffwongishandsome/archive/2011/08/09/2133114.html

收获园豆:15
zmxmiss | 园豆:191 (初学一级) | 2020-07-25 17:06

我用的是dotnetcore+EFCore+autofac,你的这个解决方法对我并不合适,谢谢你的回答

支持(0) 反对(0) 阿伟你怎么了 | 园豆:13 (初学一级) | 2020-07-25 17:19

@阿伟你怎么了: 问题根本来源于DbContext的单例模式:多个线程使用同一个DbContext的线程安全问题.你往这块找或者看就行了(EFCore底层也是用的Ado.net)
关键词:EFCore 单例模式 线程安全

支持(0) 反对(0) zmxmiss | 园豆:191 (初学一级) | 2020-07-25 17:33
0

你都共用的一个connection,别人正在使用的时候,另一个程序已经释放了,所以就有问题了

收获园豆:5
灬丶 | 园豆:3 (初学一级) | 2020-07-27 10:43
0

entity framework core 不支持在同一个DbContext实例上运行多个操作,会产生线程问题。
官方默认的注册周期为scope

收获园豆:10
gt1987 | 园豆:1150 (小虾三级) | 2020-07-30 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册