考虑一个ASP.NET Web API 2应用程序,它使用Entity Framework提供对几个数据库表的相当直接的访问。
在为大多数并发请求提供服务方面,对象生命周期的以下哪个选项最佳?
后续问题 - 如果我将要求更改为“需要最少量的DB服务器资源”该怎么办?什么是最好的选择?
答案 0 :(得分:1)
基于a detailed reply基于另一个问题:
我的问题中的选项1和3完全无效。原因是DbContext不是线程安全的,并且具有多个线程访问将带来不一致的数据状态并抛出异常。即使是在每个线程中也是如此#34;在这种情况下,ASP.NET Web API可能会在几个线程之间随意转移单个请求的处理。
选项2 - 为每个传入请求实例化一个DbContext - 是首选方式,因为它确保一次只有一个线程可以访问DbContext。
答案 1 :(得分:0)
除了不是线程安全之外,DbContexts不应该长寿。所以你必须使用2.(或者每个Db操作甚至一个DbContext实例)。
如果你“非常直接访问几个数据库表”非常简单,我建议你使用OData和一些高级js客户端,比如breeze.js。
请看这个网站:
您也可以直接使用OData服务(例如使用jQuery AJAX)或使用更简单的库(datajs,JayData)