gpt4 book ai didi

c# - 我的数据库连接应该保持打开状态并在 asp.net 中传递,还是根据需要打开和关闭?

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:35 25 4
gpt4 key购买 nike

我正在处理一个工作单元,我很好奇应该如何处理连接。我的存储库接受一个工作单元,并将该连接用于 Get() 命令。

显然,Commit() 将处理所有添加、更新和删除。这将打开连接并开始事务并在完成时关闭。 Gets应该如何处理?

UOW 是否应该在构造函数中打开连接并在完全完成后关闭?这意味着当我将 UOW 从 repo 传递到 repo 时,连接是打开的。还是我应该只在需要时打开和关闭它?

方法 #1:工作单元打开连接并且连接保持打开状态直到处理完成?

public UnitOfWork(IDbConnection connection)
{
Connection = connection;
Connection.Open();
Transaction = Connection.BeginTransaction();
}

方法 2:Get 方法的片段,它在读取之前打开并在读取之后立即关闭。如果传递给多个存储库,则使用相同的连接,只是打开和关闭一堆。

 using (var reader = manager.GetReader())
{
UOW.Connection.Open();

while (reader.Read())
list.Add(factory.CreateTFromReader(reader));

UOW.Connection.Close();
}

最佳答案

不,您应该始终在需要时打开连接,并绝对确保在工作完成后关闭它。连接池机制将负责为您的当前用户或同时在同一服务器上连接的其他用户保持连接可用

我也觉得第二个例子不太对。你应该有这样的东西

 using (IDbConnection cn = manager.GetConnection)
using (var reader = manager.GetReader())
{
cn.Open();

while (reader.Read())
list.Add(factory.CreateTFromReader(reader));
}

这将确保即使在发生异常时连接也会被关闭,并将其返回到池中以便重用

Connection Pooling

关于c# - 我的数据库连接应该保持打开状态并在 asp.net 中传递,还是根据需要打开和关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13918301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com