- 首先我们大部分的efcore框架用的DbContext(或者封装的repo)都是底层注入的上下文容器实体。
- 然后Dbcontext不是线程安全的,也就是说,你在当前线程中,只能创建一个 DbContext 实例对象(特定情况下),并且这个对象并不能被共享。
- 当我们使用多线程去执行数据库的操作时就有可能造成各种问题。
- 我这里就在网站启动时去跑发布和订阅任务。
- 解决方案:使用using从ioc容器中创建新的dbcontext 。然后用完立即释放。这样就不会占用主线程的dbContext了。
/// <summary> /// 执行未发布成功的信息 /// </summary> public void ToBePublishs() { Console.WriteLine(<
关于多线程efcore dbcontext 的解决方案。
最新推荐文章于 2024-07-11 17:26:37 发布
本文探讨了在多线程环境中使用EFCore DbContext可能遇到的问题,由于DbContext不是线程安全的,因此建议在每个线程中通过IoC容器创建新的实例,并在完成后立即释放。提供了一个在网站启动时运行发布和订阅任务的例子,展示了如何正确管理和使用DbContext以避免占用主线程。
摘要由CSDN通过智能技术生成