C# 在ASP.NET Core中为每个SQL命令打开/关闭数据库
我编写了一个简单的ASP.NET核心应用程序,其中Controller注入MyService(配置为作用域),MyService反过来注入MyDbContext 在控制器的方法中,我有2个数据库查询,调试输出如下所示:C# 在ASP.NET Core中为每个SQL命令打开/关闭数据库,c#,postgresql,asp.net-core,entity-framework-core,npgsql,C#,Postgresql,Asp.net Core,Entity Framework Core,Npgsql,我编写了一个简单的ASP.NET核心应用程序,其中Controller注入MyService(配置为作用域),MyService反过来注入MyDbContext 在控制器的方法中,我有2个数据库查询,调试输出如下所示: Executing action method... Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'. ... Closing connection to database '
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提供程序就像其他人提到的那样。连接池是您的朋友 打开和关闭都很好
就像别人提到的那样。连接池是您的朋友 打开和关闭都很好
始终按照前面提到的方法打开和关闭连接。处理您的性能问题 使您的代码更易于阅读,您将永远不必担心,我必须打开的连接在哪里,是打开的吗?它不是在别的地方关着吗 正如你所问的,我想你不是真的想要。这是我通常做的事。一个小的包装器方法,它将触发与此类似的sql命令
static bool FireCommand(SqlCommand command)
{
command.Connection.Open();
command.ExecuteQuery();
command.Connection.Close();
}
始终按照前面提到的方法打开和关闭连接。处理您的性能问题 使您的代码更易于阅读,您将永远不必担心,我必须打开的连接在哪里,是打开的吗?它不是在别的地方关着吗 正如你所问的,我想你不是真的想要。这是我通常做的事。一个小的包装器方法,它将触发与此类似的sql命令
static bool FireCommand(SqlCommand command)
{
command.Connection.Open();
command.ExecuteQuery();
command.Connection.Close();
}
每次需要执行某项操作时,都要实例化一个新的数据库上下文,并确保将其最小化到该操作的范围内。连接池被抽象出来并由EF else进行管理,在EF else中,您可以在每次需要执行某项操作时实例化一个新的数据库上下文,并确保将其最小化到该操作的范围内。连接池被抽象出来并由EF管理,否则在EF core中如何打开连接池?@Rem。如果您已经使用了“using”语句,它将为您处理所有内容,您不必担心任何事情!:)我认为“使用”是指处理连接。而池是关于重用的them@Rem看看那篇文章,特别是在“添加连接”下。您将看到这样的语句:“当连接关闭或释放时,它们会被释放回池中”。我个人使用“使用”语句,因为它更容易忘记。打开并打开。Close@Rem这取决于提供商。默认情况下,npgsql已启用池。如果要关闭此选项,请选中参数“pooling”:)。您可以在连接字符串中设置。我如何在ef core中打开连接池?@Rem。如果您已经使用“using”语句,它将为您处理所有内容,您不必担心任何事情!:)我认为“使用”是指处理连接。而池是关于重用的them@Rem看看那篇文章,特别是在“添加连接”下。您将看到这样的语句:“当连接关闭或释放时,它们会被释放回池中”。我个人使用“使用”语句,因为它更容易忘记。打开并打开。Close@Rem这取决于提供商。默认情况下,npgsql已启用池。如果要关闭此选项,请选中参数“pooling”:)。您可以在连接字符串中设置它。