1

我正在研究一个工作单元,我很好奇应该如何处理连接。我的存储库采用一个工作单元,并将该连接用于 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();
 }
4

1 回答 1

8

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

我也认为第二个例子不太正确。你应该有这样的东西

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

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

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

连接池

于 2012-12-17T16:50:56.327 回答