docs: def all(self):
          """Primary method to fetch data based on filters
  
          Also trigged when the QuerySet is evaluated by calling one of the following methods:
              * len()
              * bool()
              * list()
              * Iteration
              * Slicing
          """
          logger.debug(f'Query `{self.__class__.__name__}` objects with filters {self}')
  
          # Destroy any cached results
          self._result_cache = None
  
          # Fetch Model class and connected repository from Repository Factory
          model_cls = repo_factory.get_model(self._entity_cls)
          repository = repo_factory.get_repository(self._entity_cls)
  
          # order_by clause must be list of keys
          order_by = self._entity_cls.meta_.order_by if not self._order_by else self._order_by
  
          # Call the read method of the repository
          results = repository.filter(self._criteria, self._offset, self._limit, order_by)
  
          # Convert the returned results to entity and return it
          entity_items = []
          for item in results.items:
              entity = model_cls.to_entity(item)
              entity.state_.mark_retrieved()
              entity_items.append(entity)
          results.items = entity_items
  
          # Cache results
          self._result_cache = results
  
          return results