所有
我正在编写看起来像的代码:
public class UserController : AuthenticatedController
{
private MunicipalContext db = new MunicipalContext();
// GET: Users/Edit/5
public ActionResult Edit(int? id)
{
//Do stuff with db.Users
}
// Other action methods that do stuff with db.Users
}
来自Java背景,这感觉就像Servlets和实例字段,并开始在我的脑后引起嗡嗡的感觉。
我是否会遇到线程安全问题?
答案 0 :(得分:5)
每个控制器将根据请求创建一次,它们不是单例。线程之间没有共享实例成员。
所以答案是肯定的,每次针对file1.dat
的操作的新请求成为新的UserController
和新的UserController
时,您的代码都不存在线程问题是创造的。
附注:记得不再使用时MunicipalContext
Dispose()
个实例。更多信息here。
答案 1 :(得分:1)
您没有任何线程安全问题,但通常您会使用与ASP.NET MVC略有不同的模式,其中使用IoC将上下文注入控制器以实现每个请求的上下文模式< / p>
如果您的控制器消耗了一些同样正在进行数据库访问的服务,则会出现问题 - 如果您不在它们之间共享上下文,则可能会出现一些奇怪和/或不正确的行为。
然后,IoC容器可以在处理请求后对上下文执行dispose;你如何实际做到这一点取决于你是使用传统的ASP.NET(通过HttpModule)还是Owin(中间件组件)