C# 在.NETEF核心问题中查询字符串sql语句

C# 在.NETEF核心问题中查询字符串sql语句,c#,.net,entity-framework,core,C#,.net,Entity Framework,Core,我是新使用.Net核心EF的人 我的数据库表中有一句话,我必须执行如下操作(使用ado.net): 使用(var命令=context.Database.GetDbConnection().CreateCommand()) { command.CommandText=“”; context.Database.OpenConnection(); 使用(var result=command.ExecuteReader()) { .... } } 我在中找到此文档: 我的问题很简单:执行查询后是否需要

我是新使用.Net核心EF的人

我的数据库表中有一句话,我必须执行如下操作(使用ado.net):

使用(var命令=context.Database.GetDbConnection().CreateCommand())
{
command.CommandText=“”;
context.Database.OpenConnection();
使用(var result=command.ExecuteReader())
{
....
}
}
我在中找到此文档:


我的问题很简单:执行查询后是否需要关闭连接?我想我应该这样做,但我不知道是否有必要使用EF的相同行为并自动关闭。

在使用后处理
SqlCommand
就足够了,剩下的留给Entity framework或ADO.NET处理。SQL连接使用,这意味着连接保持打开状态,并且可以被后续查询重用

更新:

SQL连接位于
DbContext
中,
GetDbConnection()
表示

获取此
DbContext
的基础ADO.NET
DbConnection


这意味着,
DbContext
有一个DB连接,该连接由它管理(包括连接弹性等功能)。当DbContext被释放时,SQL连接也被释放。

只需添加Martin answer,
EFCore
使用连接池

您可以通过多种方式检查连接的实际数量

  • sql server中的sp_who。看
  • 在ef core中添加日志记录,请参阅
  • Perfmon
    计数器,请参阅

  • 也许垃圾收集会正确处理它?不管怎样,我把它处理掉了。THSIN数据库连接字符串,您可以考虑将MimoPosithMax和Max POSIZE设置为一些合适的VAULLS,以在调用之间保持一致的性能。
    using (var command = context.Database.GetDbConnection().CreateCommand())
    {
        command.CommandText = "<<my sql sentence>>";
        context.Database.OpenConnection();
        using (var result = command.ExecuteReader())
        {
           ....
        }
    }