我正在开展其他人开发的项目。在项目中,它有
public class HomeController : Controller
{
public HomeController() {
_EntitiesContext = new EntitiesContext();
_UsersContext = new UsersContext();
}
public UsersContext _UsersContext { get; set; }
public EntitiesContext _EntitiesContext { get; set; }
......
然后,只要需要查询,它就会使用这些上下文。
通常,我所做的是:我不在 HomeController()中创建这些上下文,而是在我需要的时候通过使用.... 语法创建它们他们。我认为它会打开连接,执行查询,然后关闭连接。否则,连接将始终打开。如果有太多人使用它,可能会产生问题。
我对此是否正确?我想我以前在网上看过这个,但是再也找不到了。
由于
答案 0 :(得分:0)
我认为它会打开连接,执行查询,然后关闭连接。
不太对劲。 ADO.NET使用connection pool
。因此,不打开与数据库的实际连接,它是从连接池中提取的。当您在DbContext上调用Dispose时,它不会关闭连接。它只是将它返回到池中,以便以后可以重用它。所以不要害怕在using
语句中包装DbContext实例。
答案 1 :(得分:0)
通常的做法是为每个HTTP请求创建一个上下文,然后在任何需要的地方使用相同的上下文。
实现它的最可行的方法是注入EntitiesContext
依赖项(传统上使用构造函数),并使用配置的对象为您注入它的最简单方法生命周期使用{{3 }}
例如(使用Microsoft Unity):
public HomeController(EntitiesContext context) {
_EntitiesContext = context;
}
容器配置(在应用程序初始化时):
container.RegisterType<EntitiesContext>(new PerHttpRequestLifetime());