我的数据库连接是否应保持打开并在asp.net中传递或根据需要打开和关闭?

sin*_*ase 1 c# asp.net ado.net

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

显然,Commit()将处理所有Add,Updates和Deletes.这将打开连接并开始事务并在完成时关闭.如何处理?

应该是UOW,在构造函数中打开连接并在完成时关闭?我将UOW从repo传递到repo时意味着连接已打开.或者我应该只在需要时打开和关闭它?

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

public UnitOfWork(IDbConnection connection)
{
    Connection = connection;
    Connection.Open();
    Transaction = Connection.BeginTransaction();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

     UOW.Connection.Close();
 }
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 8

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

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

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

     while (reader.Read())
         list.Add(factory.CreateTFromReader(reader));
 }
Run Code Online (Sandbox Code Playgroud)

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

连接池