如何在Web API 2中将多线程与实体框架一起使用

时间:2018-08-18 13:31:34

标签: multithreading entity-framework ninject

我们将根据现有应用程序创建产品。我们现有的应用程序正在使用实体框架6,Web API 2,ninject。因此,我们使用的是相同的技术,而不是创建新的设计并使用新的技术,即实体框架6,Web API 2,ninject。将会有繁重的数据库操作。我们能够将完整的操作划分为小任务。因此,我们决定使用多线程。我的问题是。

1)如何配置ninject在每个线程调用上创建一个新的dbcontext?

2)线程完成其操作后,无论其余线程是否完成其操作,数据库更改都应立即生效。

3)完成每个线程操作后,应将线程及其dbcontext一起处置。

4)在实体框架中使用多线程会不会有任何副作用。

一个编码示例将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

1)如何配置ninject在每个线程调用上创建一个新的dbcontext?

使用Tasks。在每个Task的内部,在using块中创建一个新的DbContext。我猜在ninject中这意味着Transient范围。

  

2)线程完成其操作后,无论其余线程是否完成其操作,数据库更改都应立即生效。

在每个任务中使用单独的DbContext应该可以做到这一点。

  

4)在实体框架中使用多线程会不会有任何副作用。

您可能会在数据库中遇到等待锁定,资源耗尽或死锁的情况。

  

3)完成每个线程操作后,应将线程及其dbcontext一起处置。

使用任务,您无需显式管理线程。

  

一个编码示例将不胜感激。

不清楚您为什么要在客户端中使用并行性。如果您可以解释一下,包括有关数据库的详细信息,则可能有相关的编码示例。否则可能会很清楚,客户端的多线程只是没有帮助。