Dapper with UOW - 接続を閉じないでください

dapper repository-pattern unit-of-work

質問

私はDapperで私のDALを以下のarticalを使って実装しました

Dapperの実装

しかし、データベースとの接続ごとにdbとの接続が作成されます。接続プールは再利用されません。私は閉じて、適切に接続を終了したと信じています。

これは、サービスレイヤから呼び出す方法のサンプルです

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

これはリポジトリ呼び出しです

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を学ぶのに最適です。私は自分自身でその記事を読んで始めました。ビジネス上のニーズを満たすために同様の問題を抱えていましたが、コードを少し修正しました。 この答えで詳細なコードを見つけることができます。

このコードを使用すると、接続/トランザクションをより詳細に制御できます。あなたはこれを次のように呼んでいます:

トランザクションの場合:

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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ