왜 Dapper는 그물을 열고 연결 자체를 닫지 않습니까?

.net connection-pooling dapper sqlconnection

문제

Dapper는 연결을 사용할 때 연결이 열리기를 암묵적으로 기대합니다. 왜 열거 나 닫지 않는거야? 이것은 단순히 연결 관리가 아니겠습니까?

나는 동료와 내가 연결 풀링으로 뒤에서 일어나는 일의 본질을왔다 갔다하고 여러 명령들 사이에서 연결을 열거 나 열거 나 닫는 데 어떤 이익이 있다면 각 명령에 대해.

수락 된 답변

Dapper는 현재 (그리고 꽤 오랜 기간 동안) 내부적으로이를 처리합니다. 그냥 작동합니다.


원본 (구식) 답변 :

너는 틀리지 않아. 이러한 불편 함을 느끼지 못했던 이유는 기존의 이유로 (특히 LINQ-to-SQL을 독점적으로 사용했기 때문에) 기본 연결 방식이 DataContext 이기 때문에 dapper 메서드를 확장 메서드로 다시 노출합니다 DataContext .

어리석은 것은 :이 방법들이하는 일은 :

using(db.Connection.EnsureOpen()) {
    db.Connection.{the dapper method}
}

여기 EnsureOpen은 다음과 같은 건방한 방법입니다.

  • 접속이 열려있는 경우는 null
  • 그렇지 않으면 연결을 열고 완료되면 연결을 닫는 IDisposable 토큰을 반환합니다.

그래서 : 우리는 분명히 당신의 고통을 정확하게 느꼈지만, 우리는 그것을 한층 더 구현했습니다.

기능 요청으로 로그인하십시오. 말끔이의 소유권을 할 수없는 이유가 전혀 없다 - 우리는 (나는 비 버퍼링 된 데이터에 대한 "독자"에 맞게 약간 조정할해야하지만) 모든 코드가 있습니다.


인기 답변

여기에 반대되는 대답을 추가해야합니다. 또는 적어도 특정 상황에서만 Dapper가 연결을 다르게 처리 할 수 ​​있다고 제안해야합니다. Dapper.SqlMapper를 방금 반영했으며 ExecuteCommand 메서드 (공용 API에서 실행)를 통해 체크 아웃하여 연결이 닫혔는지 확인한 다음 연결이 닫혀 있는지 확인합니다.

내 동료에 의한 코드 리뷰가 명시 적으로 connection.open을 호출하지 않았 음을 강조하면서 DB를 통해 dapper를 호출하기 전에 엽니 다. 내 통합 테스트가 모두 초록색 이었기 때문에 이것은 실행되지 않았습니다. 그래서 우리는 Dapper 코드로 뛰어 들었습니다. Explositness를 위해 전화를하는 것이 더 좋다고 주장 될 수 있지만 반대로 일부는 코드가 적을수록 좋다고 주장 할 수 있습니다.



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