Minha filosofia geral sempre foi que as camadas de acesso a dados devem ser projetadas para serem desconectadas e sem estado. Em outras palavras, você tem uma camada de banco de dados responsável por buscar diferentes tipos de dados e retorná-los e imediatamente desconectar a conexão (devolvê-los ao pool)
Se você tiver coisas como paginação, ele deve ser implementado no nível do banco de dados com as entradas de sp tomando nr por página e página para buscar, assim você não precisa manter nada persistente na memória entre as solicitações.