小巧玲瓏 - 不要關閉連接

dapper repository-pattern unit-of-work

我通過使用以下artical與Dapper實現了我的DAL

精巧的實施

但它創建了與db的每個數據庫調用的連接。它不重用連接池。我相信我已經關閉並正確處理了連接。

這是如何從服務層調用的示例

dtoList = unitofWork.RegionalSettingRepository.GetCurrencySymbols(); unitofWork.Commit(); // To close the connections

這是Repository調用

public List<CurrencySymbolDTO> GetCurrencySymbols()
    {
        List<CurrencySymbolDTO> dtoList = null;
        try
        {
            string strSQL = "SELECT * from CurrencySymbol";
            dtoList = this.Connection.Query<CurrencySymbolDTO>(strSQL, null, transaction: Transaction).ToList();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {

        }
        return dtoList;
    }

有人可以告訴我為什麼為每個數據庫調用創建了很多連接。我確實使用以下SQL查詢來監視連接數

SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName FROM sys.sysprocesses WHERE DB_NAME(dbid) ='database name' GROUP BY dbid, loginame

提前致謝

一般承認的答案

你提到的文章非常適合用Dapper學習UoW;我自己開始用那篇文章研究UoW。在實現它以滿足我的業務需求時我遇到了類似的問題,我稍微修改了一下代碼。您可以在答案中找到詳細代碼。

使用此代碼,您可以更好地控制連接/事務;你這樣稱呼它:

隨著交易:

using(DalSession dalSession = new DalSession())
{
    UnitOfWork unitOfWork = dalSession.UnitOfWork;
    unitOfWork.Begin();
    try
    {
        //Your database code here
        unitOfWork.Commit();
    }
    catch
    {
        unitOfWork.Rollback();
        throw;
    }
}

沒有交易:

using(DalSession dalSession = new DalSession())
{
    //Your database code here
}


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow