在 .NET Web API 中使用 Dapper 重用数据库连接

Tho*_*eld 6 .net c# dapper

大多数,如果不是全部,我见​​过的 .NET 中的 Dapper 示例都使用这样的结构:

    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
        return conn.Query<T>(sql, param);
    }
Run Code Online (Sandbox Code Playgroud)

如果您有 Web API ,每次向服务器发出请求时都建立新连接是否明智?或者将连接抽象到另一个类并将其注入每个控制器以便它们使用相同的连接是一种更好的模式。

从表面上看,重用连接似乎会导致更快的响应,但我不知道 SqlConnection 对象中发生的事情的本质,所以我不确定这是否是一个好主意。

mas*_*son 6

该代码具有误导性。在大多数情况下,当您执行此操作时,实际上并没有创建连接。默认情况下为连接启用,除非您明确告诉它不要。

我不是 100% 确定池化背后的确切标准,但其要点是,如果您在代码中快速重用相同的连接字符串,则池化实际上应该只创建一个从应用程序到 SQL Server 的连接,而不是创建每次new SqlConnection打开它时都会有一个新的连接。

通过处理连接,您基本上表示该特定使用已完成....因此维护池背后的逻辑可以知道您已完成该特定连接。同样,我不确切知道池是如何实现的,但我想它在内部跟踪从您的代码建立了多少连接,以便它可以决定是否保持与 ​​SQL Server 的实际连接打开。

  • 太好了谢谢。您的链接让我找到了[关于池的另一篇文章](https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling?view=netframework-4.8)在文档中非常有帮助: (2认同)