繁体   English   中英

如何从另一个线程更新数据库

[英]How to update database from another thread

在我的 Asp.net Core 项目中,我使用 Backgroundworker 来执行非常耗时的过程。 工作人员完成后我想更新数据库。 与数据库的连接是通过依赖注入注入的。

我收到以下错误:

System.ObjectDisposedException:“无法访问已处置的 object。此错误的一个常见原因是处置从依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例。如果您调用 Dispose,则可能会发生这种情况() 在上下文中,或者将上下文包装在 using 语句中。如果你使用依赖注入,你应该让依赖注入容器处理上下文实例。”

原因是我的主线程在后台工作人员完成之前已经返回了一个 ActionResult 并且可以通过这种方式完成。 但是与数据库的连接被释放了。

现在有没有办法防止依赖注入处理?

我已经尝试克隆数据库连接,但我得到了同样的错误。

没有。 恭喜。 您发现了使用依赖注入获取数据库连接不起作用的情况。 时期。 这是流程设计的一部分——ASP:nET Core 中的 DI 与请求的生命周期相关,而后台工作者……不是。 选择?

  • 直接从 DI 请求一个单独的数据库连接。
  • 启动另一个内部请求,以便 DI 堆栈为该请求运行。 从 asp.net 堆栈的角度来看,这个可以同步运行,因此 DI 不会处理它。
  • 在没有 asp.net 核心用于页面生存期访问的 DI 机制的情况下,有另一种方法来获取数据库连接 object。

无法避免处置,因为这基本上是一种基本情况。 它在请求后在那里清理。

你读过https://learn.microsoft.com/en-us/do.net/architecture/microservices/multi-container-microservice.net-applications/background-tasks-with-ihostedservice 了吗? 那一个谈论在内部实现微服务。 这允许在这些托管服务上使用依赖注入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM