我正在研究一个工作单元类,我很好奇应该如何处理连接。我的存储库接受一个工作单元,并将该连接用于 Get() 命令。
显然,Commit() 将处理所有添加、更新和删除。这将打开连接并开始事务,并在完成后关闭。应该如何处理 Gets?
UOW 是否应该在构造函数中打开连接并在完全完成后关闭?这意味着当我将 UOW 从存储库传递到存储库时,连接是开放的。还是我应该只在需要时打开和关闭它?
方法#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));
}
这将确保即使在发生异常时连接也会关闭,并将其返回到池中以便重用
连接池