我们使用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应限定为当前请求,但似乎没有正确关闭连接。
任何帮助都会很棒?
答案 0 :(得分:1)
我不知道MySql。如果您在SQL服务器上下文中,那么您将面对“连接池”:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling。
这是您的应用程序保留一组活动连接以加速到达数据服务器的过程。因此,即使你对游泳池说“我不再需要这种连接”,它也不相信你并保持连接打开......以防万一。
多长时间,它取决于超出应用范围的逻辑。一个用法说:它是连接池领域,只是让它完成他的工作。
因此,您的问题的答案是:您无法显式关闭与服务器的连接。连接池将决定何时关闭。