每个 SQL 命令的 Open/Close 数据库在 ASP.NET 核心中

Open/Close database in ASP.NET Core for every SQL command

我编写了简单的 ASP.NET 核心应用程序,其中 Controller 注入 MyService(配置为 Scoped),后者又注入 MyDbContext。

在我的控制器方法中,我有 2 个数据库查询,我的调试输出如下所示:

 Executing action method...
 Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
 ...
 Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
 Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
 ...
 Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
 Request finished in...

问题是:在每个请求上打开一个新连接是否正确,甚至更多 - 为每个 sql 命令打开一个新连接?它不能建立一次与数据库的连接并重新使用它吗?性能不是更好吗?

PS:我将 PostgreSQL 与 npgsql 提供程序一起使用

就像别人提到的那样。连接池是你的朋友。

开闭完全没问题

如前所述,始终打开和关闭连接all over SO. Connection pooling 处理您的性能问题。

使您的代码更易于阅读,您永远不必担心,我必须打开的那个连接在哪里,它打开了吗?别的地方不是关门了吗?

如你所问,我想你真的不想。这就是我通常做的。一个小型包装器方法,可以触发您的 sql 命令,与此类似。

static bool FireCommand(SqlCommand command)
{
    command.Connection.Open();
    command.ExecuteQuery();
    command.Connection.Close();
 }