EF Core MySql连接未关闭

时间:2017-06-14 07:33:10

标签: mysql entity-framework .net-core

我们使用MySql nuget包在.NET Core和Entity Framework Core中开发了一个项目。

使用以下行将上下文添加到依赖注入:

services.AddDbContext<ReadWriteContext>(options => options.UseMySQL(Configuration["Machine:ReadWriteConnectionString"]));

然后在控制器中,这样注入:

public class SystemController : Controller
{
    private readonly ReadWriteContext _dataContext;

    public SystemController(ReadWriteContext dataContext)
    {
        _dataContext = dataContext;
    }

    ...

}

并按原样使用:

var hasServices = await _dataContext.Services.AnyAsync();

在日志中,我们看到开始和结束日志行:

Opening connection to database 'config_service' on server '10.211.55.5'.
Closing connection to database 'config_service' on server '10.211.55.5'.

但是,当我们查看MySql服务器并运行“show full processlist”时,连接仍显示为处于睡眠状态且从不关闭。当您停止.NET进程时,连接将关闭并从MySql进程列表中消失。

如何在请求完成时关闭连接。 AddDbContext应限定为当前请求,但似乎没有正确关闭连接。

任何帮助都会很棒?

1 个答案:

答案 0 :(得分:1)

我不知道MySql。如果您在SQL服务器上下文中,那么您将面对“连接池”:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

这是您的应用程序保留一组活动连接以加速到达数据服务器的过程。因此,即使你对游泳池说“我不再需要这种连接”,它也不相信你并保持连接打开......以防万一。

多长时间,它取决于超出应用范围的逻辑。一个用法说:它是连接池领域,只是让它完成他的工作。

因此,您的问题的答案是:您无法显式关闭与服务器的连接。连接池将决定何时关闭。