c# - 如何确保我们的 .NET Core API 清理数据库连接?

标签 c# sql-server entity-framework .net-core ubuntu-14.04

我们正在 Ubuntu 14.04 上的 Docker 容器中运行 .NET Core 1.1 API。 API 通过 EF Core 与各种 SQL Server 数据库进行交互,我们看到数据库连接没有被清理,也没有被重用。通过 sp_who2 查询,我们很快就看到数据库上有数千个连接。

  1. 所有连接都是使用相同的连接字符串创建的,因此连接池应该能够工作。
  2. 连接上的 LastBatch 时间不会更新,因此它们似乎没有被重用,正如您在池化时所期望的那样。
  3. 调用数据库的对象是使用 Scoped 生命周期定义的,因此应在每次 session 后进行清理。
  4. 休眠 Rhinos EF Profiler 似乎显示 DbContext 在 EF 内得到一致清理。
  5. 每次访问数据库时,连接计数都不会增加,因此可能是特定代码 - 我们仍在努力确定这一点。
  6. 我们的测试表明,在 IIS 或 IIS Express 下的 Windows 上运行时不会发生这种情况,因此它似乎是 Docker 或 Ubuntu 特有的。

这可能是 .NET Core 中设计的吗?还是我们错过了一个技巧?我们如何强制 EF 进行一些连接清理?

最佳答案

我们现在非常确定这是由 corefx System.Data.SqlClient 中的错误引起的,该错误已在版本 4.3.1 中修复。我们运行的是 4.3.0,现在已更新到 4.3.1,初步测试表明问题已解决。

您可以在 dotnet/corefx Github 存储库 Issue #13422 中阅读有关该问题的更多信息。 。

总而言之,这似乎是 Linux 特有的错误,其中连接未被释放。

当我们证明这可以让我满意地解决问题时,我将确认/标记为答案。

关于c# - 如何确保我们的 .NET Core API 清理数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46805130/

相关文章:

javascript - 应用程序中所有语言的名称大小写约定

sql - 如何编写SQL查询以标识特定字段中的重复值?

c# - EF 6 关系 : One or more validation errors were detected during model generation

c# - 查找将窗口停靠到左侧/右侧

c# - 如何在 C# 中重置计时器?

c# - 将命令绑定(bind)到 ListView 项目 MVVM 正确的方式

sql - 获取行中日期值之前的最新日期

c# - Entity Framework (数据库优先)对同一表命名约定控制的多重关系

c# - Entity Framework 迁移重命名表和列

C#泛型基础知识?