实体框架工作单元模式对象生存期

时间:2012-10-09 16:00:05

标签: asp.net-mvc entity-framework unit-of-work entity-framework-5

我正在使用MVC + Entity Framework 5,目前正在查看Unit of Work pattern。在控制器类中,我看到以下代码:

private UnitOfWork unitOfWork = new UnitOfWork();

这是否意味着对于每个控制器创建UnitOfWork类,导致每个UnitOfWork实例的数据库连接?或者所有DbContext个实例(在本文SchoolContext}中创建的UnitOfWork个实例共享相同的连接?

我的第二个问题:如果只创建一个存储在UnitOfWork中的HttpContext实例,或者是否有更好的方法,它会改善应用程序的性能吗?

1 个答案:

答案 0 :(得分:2)

首先,我要提醒你。我知道你没有这样做,但我想确保你明白你永远不应该创建一个单独的数据上下文并使它成为静态或单例。原因是静态应用程序的所有实例(即多个用户)之间共享,数据上下文不是多线程或多用户安全的。

在发出警告之后,让我们继续前进。

一般情况下,您不必担心这一点。原因是即使您创建了多个UnitOfWorks,一次只能有一个控制器处于活动状态(每个Web请求)。实体框架有一个连接池,可以重用连接并优化它们的使用。 (实际上,这是Ado.net的一部分,但它仍然适用)