ASP.NET Web API中DbContext的推荐生命周期?

uri*_*rig 5 entity-framework asp.net-web-api

考虑一个ASP.NET Web API 2应用程序,它使用Entity Framework提供对几个数据库表的相当直接的访问.

在为大多数并发请求提供服务方面,对象生命周期的以下哪个选项最佳?

  1. 实例化所有请求使用的单例DbContext.
  2. 为每个传入请求实例化一个DbContext.
  3. 为传入请求的线程池中的每个线程实例化一个DbContext?
  4. 其他?

后续问题 - 如果我将要求更改为"需要最少量的DB服务器资源"该怎么办?什么是最好的选择?

uri*_*rig 2

基于对另一个问题的详细答复

我的问题中的选项1和3完全无效。原因是DbContext不是线程安全的,多线程访问会带来数据状态不一致并抛出异常。即使在“每个线程”的情况下,ASP.NET Web API 也可能在多个线程之间任意转移单个请求的处理。

选项 2 -为每个传入请求实例化一个 DbContext - 是首选方法,因为它确保一次只有一个线程可以访问 DbContext。