我使用的"Using"语句是这样的:

using (SqlConnection connection = new(ApplicationSettingsData.ConnectionString)
{
    // connection.Query();
}

根据我对Dapper连接的研究和了解,它有两个变通方法.一种是Dapper自动打开/关闭连接,另一种是完全由我控制.

我所理解的是,如果我只有一个查询,我应该只使用Dapper方法和Done!(像上面的代码一样) 如果我有多个查询、方法和工作要做,我应该自己打开连接,让它打开,直到我拥有的最后一个查询,然后关闭它(如下例所示).

我的理解正确吗?

using (SqlConnection connection = new(ApplicationSettingsData.ConnectionString)
{
    await connection.OpenAsync();
    // QueryAsync<>...
    // Execute()...
    // QueryAsync<>...
    await connection.CloseAsync();
}

推荐答案

Yes you are correct.

如果需要,Dapper将自动打开和关闭连接.但是,如果您正在执行多个查询,并且希望在两者之间保持连接打开,则应显式打开它.

请注意,由于连接池的存在,物理连接实际上并没有关闭.它被返回到池中,如果它在一定时间内被重用,那么它将保持打开状态,并在下次使用时重置.因此,您不应该缓存连接对象,因为连接池处理生存期.

不需要显式关闭,因为using会这样做.

Csharp相关问答推荐

为什么使用DXGI输出复制和Direct 3D时捕获的图像数据全为零?

如何创建ASP.NET Core主机并在同一进程中运行请求

程序集.加载从exe的异常

. NET在上一个操作完成之前,在此上下文实例上启动了第二个操作

C#DateTime.ToString在ubuntu和centos中返回不同的结果

Azure DEVOPS找不到定制的Nuget包

如何使datagridview的列具有响应性,以便不是所有列都更改其宽度

如何忽略API JSON响应中的空字符串?

Rider将.NET安装在哪里

等待一个等待函数

.NET 6:如何防止系统生成的日志(log)?

当try 测试具有协变返回类型的抽象属性时,类似功能引发System.ArgumentException

ReadOnlyMemory访问基础索引的替代方案

将J数组转换为列表,只保留一个嵌套的JToken

错误:此版本的Visual Studio无法打开以下项目

当我手动停止和关闭系统并打开时,Windows服务未启动

删除MudRadio时,MudRadioGroup未 Select 正确的MudRadio

Cmd中的&ping.end()";有时会失败,而";ping";总是有效

项目参考和方法签名问题

使用本地公共PEM文件加密字符串,使用Azure KayVault中的私钥解密