Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET Core中为每个SQL命令打开/关闭数据库_C#_Postgresql_Asp.net Core_Entity Framework Core_Npgsql - Fatal编程技术网

C# 在ASP.NET Core中为每个SQL命令打开/关闭数据库

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 '

我编写了一个简单的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 '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”:)。您可以在连接字符串中设置它。