Dapper를 사용하는 IDbConnection 팩토리

asp.net c# dapper

문제

내 ASP.NET WebForms 솔루션에서 dapper를 사용합니다.

데이터를 처리하는 모든 클래스는이 기본 클래스에서 열린 연결을 검색합니다.

public abstract class SalesDb : IDisposable
{
    protected static IDbConnection OpenConnection()
    {
        IDbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesDb"].ConnectionString);
        connection.Open();
        return connection;
    }

    public void Dispose()
    {
        OpenConnection().Dispose();
    }
}

이 기본 클래스를 사용하는 서비스 클래스의 예

public class LeadService : SalesDb
{
    public IEnumerable<LeadDto> Select()
    {
        using (IDbConnection connection = OpenConnection())
        {
            return connection.Query<LeadDto>("Lead_Select",
                null, null, true, null, CommandType.StoredProcedure);
        }
    }
}

기본 클래스의 OpenConnection( ) 메서드가 정적이며 모든 호출마다 새 인스턴스를 반환한다는 단점이 있습니까?

수락 된 답변

처분 된 새 연결을 만들고 있습니까? 그것은 작동하지 않습니다! 반복 횟수가 100 회를 넘는 단순한 루프를 사용하면 (최대 풀 크기 기본값은 100) 예외가 발생합니다 ( 너무 많은 열린 연결 , ExecuteReader에는 열려 있고 사용 가능한 연결 등이 필요함 ).

어떤 경우에는 수영장이 새로운 물리적 연결을 연속적으로 만들어야하기 때문에 심각한 성능 문제가 예상됩니다.

나는 Connection-Pool을 다시 만들지 않을 것이다. 내 충고는 : asp.net에서 더 이상 그 클래스를 사용하지 마십시오.

Connection-Pool의 영토를 오염시키지 마십시오 ;-)

그러나 두 질문 모두 아니오 로 대답 할 수 있습니다. 정적 메소드는 (정적 연결과 달리) 문제가 아니며 풀이 현재 사용되지 않는 연결을 리턴하므로 항상 새로운 연결을 리턴하지는 않습니다. 그러나 클래스의 주된 문제는 연결을 생성하고 연결을 해제하는 dispose 입니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow