데이터베이스 연결을 효율적으로 처리

asp.net-mvc c# dapper

문제

나는 Dapper 작업을 위해 아래 헬퍼 클래스를 사용하고 있습니다. 복합 DTO 객체에 매핑 될 엔티티가 여러 개인 경우 개별적으로 가져 와서 속성에 수동으로 첨부합니다.

예 : 고객을 검색하기 위해 Orders 및 Addresses 속성이있는 Customer 클래스가 있습니다. QueryMultiple 메서드에 대해 알고 있지만 실시간으로 다른 쿼리가 있습니다.

 cust.Orders = DapperHelper.ExecList<OrderDTO>(qry1, params1);
 cust.Addresses = DapperHelper.ExecList<AddressDTO>(qry2, params2);

내 생각 엔 성능 항목이있을 때마다 하위 항목을 채우는 연결을 열면 의심 스럽습니다. 대신 생성자에서 연결을 초기화하고 dispose 메서드에서 닫아서 각 요청에 대해 단일 연결을 사용할 수 있습니까?

 public class DapperHelper
    {
        private static string _conn =  Convert.ToString(ConfigurationManager.ConnectionStrings["dbContext"]);


        public static IEnumerable<T> ExecList<T>(string query, object cmdParams = null, CommandType cmdType = CommandType.Text, bool buffered = true)
        {
            IEnumerable<T> list;
            using (IDbConnection _db = new SqlConnection(_conn))
            {
                list = _db.Query<T>(query, param: cmdParams, commandTimeout: 0, commandType: cmdType, buffered: buffered);
                _db.Close();
            }
            return list;
        }

         public static T ExecSingleOrDefault<T>(string query, object cmdParams = null, CommandType cmdType = CommandType.Text)
    {
        T obj;
        using (IDbConnection _db = new SqlConnection(_conn))
        {
            obj = _db.Query<T>(query, param: cmdParams, commandTimeout: 0, commandType: cmdType).SingleOrDefault();
            _db.Close();
        }
        return obj;
    }
}

수락 된 답변

SQLConnection 은 기본적 으로 연결 풀링을 자동으로 사용하므로 연결을 올바르게 처리하는 한 네트워크 연결 오버 헤드에 대해 걱정할 필요가 없습니다.


인기 답변

QueryMultiple을 알고 있다면 왜 두 모델을

public class CustomerViewModel

   List<Orders> orderList;
   List<Address> addresslit;
end class

그런 다음 Dapper를 호출합니다. 쿼리

그것을지도로

 IEnumerable<CustomrerViewModel> list

이 방법은 단 하나의 SQL 연결이 필요합니다.



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