并发时会报错,该如何解决??
统一回复:出现该问题的原因已找到,DbContext实例是单一实例,但我却用了多个线程在此单例上操作数据,由于DbContext在操作数据后会调用SaveChanges方法,该方法会和当前上下文一一对应,在多线程时,这里就会报错。
解决方法:没用锁,试过用连接池,感觉挺耗性能,所以将插入操作分离开了,用了RabbitMQ。
你使用的connecttion对象是只有一个,多个线程使用时,如果前面一个线程关闭了这个connection,其他线程在使用这个connecttion对象就会报错,所以你这个并发的地方每个线程都需要使用一个connection对象,保证connecttion对象的线程安全
可以参考这个链接
https://www.cnblogs.com/jeffwongishandsome/archive/2011/08/09/2133114.html
我用的是dotnetcore+EFCore+autofac,你的这个解决方法对我并不合适,谢谢你的回答
@阿伟你怎么了: 问题根本来源于DbContext的单例模式:多个线程使用同一个DbContext的线程安全问题.你往这块找或者看就行了(EFCore底层也是用的Ado.net)
关键词:EFCore 单例模式 线程安全
你都共用的一个connection,别人正在使用的时候,另一个程序已经释放了,所以就有问题了
entity framework core 不支持在同一个DbContext实例上运行多个操作,会产生线程问题。
官方默认的注册周期为scope