Dapper with UOW - 연결을 닫지 마십시오.

dapper repository-pattern unit-of-work

문제

나는 다음과 같은 artical을 사용하여 Dapper로 내 DAL을 구현했습니다.

대퍼 구현

그러나 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를 배울 때 유용합니다. 나는 그 기사로 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는 합법적입니까? 예, 이유를 알아보십시오.