【问题标题】:EF Core MySql connections not closingEF Core MySql 连接未关闭
【发布时间】:2017-06-14 07:33:10
【问题描述】:

我们使用 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 服务器并运行“显示完整进程列表”时,连接仍然显示为处于睡眠状态并且永远不会关闭。当您停止 .NET 进程时,连接会关闭并从 MySql 进程列表中消失。

如何在请求完成后关闭连接。 AddDbContext 的范围应为当前请求,但它似乎无法正确关闭连接。

任何帮助都会很棒?

【问题讨论】:

  • .Net 通常使用连接池,它不会中断连接,它根本不会无缘无故地保持活动状态。如果你需要强制连接,你需要处理上下文,我认为。

标签: mysql entity-framework .net-core


【解决方案1】:

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

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

多久,这取决于应用程序范围之外的逻辑。一种说法是:它是连接池领域,让它发挥作用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多