在类构造函数中创建实体上下文?或者在需要使用时创建它
本文关键字:创建 构造函数 实体 上下文 或者 | 更新日期: 2023-09-27 18:24:56
我正在做一个别人开发的项目。在该项目中,它有
public class HomeController : Controller
{
public HomeController() {
_EntitiesContext = new EntitiesContext();
_UsersContext = new UsersContext();
}
public UsersContext _UsersContext { get; set; }
public EntitiesContext _EntitiesContext { get; set; }
......
然后,每当需要查询时,它都会使用这些上下文。
通常,我所做的是:我不在HomeController()中创建这些上下文,而是通过使用…创建它们语法。我认为它会打开连接,进行查询,然后关闭连接。否则,连接将始终打开。如果太多人使用它,可能会产生问题。
我说得对吗?我想我以前在网上读过这个,但现在找不到了。
感谢
我认为它会打开连接,进行查询,然后关闭连接。
不太对。ADO.NET使用connection pool
。因此,与数据库的实际连接并没有打开,而是从连接池中提取的。当您对DbContext调用Dispose时,它不会关闭连接。它只是将其返回到池中,以便以后可以重用。因此,不要害怕将DbContext实例包装在using
语句中。
通常的做法是为每个HTTP请求创建一个上下文,然后在任何需要的地方使用相同的上下文。
实现它的最可行方法是注入EntitiesContext
依赖项(传统上使用构造函数),而在配置的对象生命周期内为您注入它的最简单方法是使用IoC容器。
例如(使用Microsoft Unity):
public HomeController(EntitiesContext context) {
_EntitiesContext = context;
}
容器配置(应用程序初始化时):
container.RegisterType<EntitiesContext>(new PerHttpRequestLifetime());