EF核心MySql连接未关闭
我们已经使用MySql nuget包在.NET Core和Entity Framework Core中开发了一个项目 使用以下行将上下文添加到依赖性注入:EF核心MySql连接未关闭,mysql,entity-framework,.net-core,Mysql,Entity Framework,.net Core,我们已经使用MySql nuget包在.NET Core和Entity Framework Core中开发了一个项目 使用以下行将上下文添加到依赖性注入: services.AddDbContext<ReadWriteContext>(options => options.UseMySQL(Configuration["Machine:ReadWriteConnectionString"])); 并用作: public class SystemController : Con
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服务器并运行“ShowFullProcessList”时,连接仍然显示为处于睡眠状态,并且从未关闭。当您停止.NET进程时,连接将关闭并从MySql进程列表中消失
请求完成后,如何关闭连接。AddDbContext的作用域应为当前请求,但它似乎没有正确关闭连接
有什么帮助吗?我不知道MySql有什么帮助。也就是说,如果您处于SQL server上下文中,您将面临“连接池”: 也就是说,您的应用程序保留一组活动连接,以加快到达数据服务器的过程。因此,即使你对游泳池说“我不再需要这个连接”,它也不相信你并保持连接打开。。。以防万一 在多长时间内,它取决于超出应用范围的逻辑。有一种说法是:这是连接池领域,让它来完成他的工作吧
因此,您的问题的答案是:您不能显式地关闭与服务器的连接。连接池将决定何时关闭或不关闭。.Net通常使用一个连接池,它不会断开连接,只是没有理由它不会保持活动状态。如果需要强制连接,我认为需要处理上下文。