public Task <TModel> FetchOneAsync(bool throwIfNotFound = false)
        {
            var parameters = new FetchOneParameters <TModel>(fetchParameters)
            {
                ThrowIfNotFound = throwIfNotFound
            };

            return(repository.FetchOneAsync(parameters));
        }
        internal Task <TModel> FetchOneAsync <TModel>(FetchOneParameters <TModel> fetchParameters) where TModel : class
        {
            var fq = FormFetchOneQuery(fetchParameters);

            // 3 Taking
            if (fetchParameters.ThrowIfNotFound)
            {
                // TODO: actually need to support 'single' but we dont use it.
                return(fq.FirstAsync());
            }
            else
            {
                return(fq.FirstOrDefaultAsync());
            }
        }
        private IQueryable <TModel> FormFetchOneQuery <TModel>(FetchOneParameters <TModel> fetchParameters) where TModel : class
        {
            Check.NotNull(fetchParameters, "fetchParameters");
            // !IMPORTANT! Call order DOES matter!
            // 1 Build Query
            var queriedItems = Query(fetchParameters);

            if (fetchParameters.NoTracking)
            {
                queriedItems = queriedItems.AsNoTracking();
            }
            // 2 Filtering
            queriedItems = fetchParameters.PerformFiltering(queriedItems);
            return(queriedItems);
        }