.net 是否应该关闭或释放注册为InstancePerRequest的SqlConnection?

isr3a4wc  于 2023-03-20  发布在  .NET
关注(0)|答案(1)|浏览(137)

我在Autofac中将System.Data.SqlClient.SqlConnection的一个新示例注册为InstancePerRequest,并在注册中将连接注册为.Open()
我在实现IDisposable的多个存储库服务中使用它。
我不确定是需要.Close()连接还是.Dispose()连接。
每一个来源或信息说不同的事情,这让我很困惑。
我希望对此事作出澄清并提供可靠的资料来源。
谢谢

5vf7fwbs

5vf7fwbs1#

一个月一个月一个月一个月
神奇的事情发生在Open()调用上。它将根据ConnectionString判断是否可以使用以前的池连接。通过总是“打开”一个“新”连接并将其处理掉,可以确保不会在连接上的其他操作中留下任何挂起的东西。但是如果您试图通过保留'SqlConnection对象并注入它来自己实现连接池,你会有麻烦的。
See this question for more information.
直接回答你的问题,接收注入连接的代码不应该丢弃它,因为看起来你想继续使用它。但是你不应该这样使用SqlConnection。你的方法可能对其他事情是正确的。
using模式是正确使用它的最简单方法。
使用using语句:

{
    using var connection = new SqlConnection(yourConnectionStringHere);
    connection.Open();
    //Use the connection somehow
    //connection will be disposed when the scope exits in using statement
}

或者使用经典的using块:

{
    using (var connection = new SqlConnection(yourConnectionStringHere))
    {
        connection.Open();
        //Use the connection somehow
    }    
}

相关问题