我正在使用MVC + Entity Framework 5,目前正在查看Unit of Work pattern。在控制器类中,我看到以下代码:
private UnitOfWork unitOfWork = new UnitOfWork();
这是否意味着对于每个控制器创建UnitOfWork
类,导致每个UnitOfWork
实例的数据库连接?或者所有DbContext
个实例(在本文SchoolContext
}中创建的UnitOfWork
个实例共享相同的连接?
我的第二个问题:如果只创建一个存储在UnitOfWork
中的HttpContext
实例,或者是否有更好的方法,它会改善应用程序的性能吗?
答案 0 :(得分:2)
首先,我要提醒你。我知道你没有这样做,但我想确保你明白你永远不应该创建一个单独的数据上下文并使它成为静态或单例。原因是静态应用程序的所有实例(即多个用户)之间共享,数据上下文不是多线程或多用户安全的。
在发出警告之后,让我们继续前进。
一般情况下,您不必担心这一点。原因是即使您创建了多个UnitOfWorks,一次只能有一个控制器处于活动状态(每个Web请求)。实体框架有一个连接池,可以重用连接并优化它们的使用。 (实际上,这是Ado.net的一部分,但它仍然适用)