2017-06-14 58 views
0

我们使用MySql nuget包在.NET Core和Entity Framework Core中开发了一个项目。EF Core MySql连接不关闭

上下文被加到使用以下行扶养注射:

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应该被限制到当前的请求,但它似乎没有正确关闭连接。

任何帮助将是伟大的?

+0

.Net通常使用一个连接池,它不会中断连接,它不会无故地保持活动状态。如果您需要强制连接,我认为您需要处理上下文。 – VMAtm

回答

1

我不知道用MySql。这就是说,如果你在SQL服务器上下文中,你将面临“连接池”:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

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

多长时间,它取决于超出应用程序范围的逻辑。一个用途是说:这是连接池领域,让它做他的工作。

所以你的问题的答案是:你不能明确关闭到服务器的连接。连接池将决定何时关闭。