/// <summary>
        /// Get all species observation data providers.
        /// </summary>
        /// <param name="context">Web service request context.</param>
        /// <returns>All species observation data providers.</returns>
        public virtual Dictionary <Int32, WebSpeciesObservationDataProvider> GetSpeciesObservationDataProvidersDictionary(WebServiceContext context)
        {
            Dictionary <Int32, WebSpeciesObservationDataProvider> dataProviders;
            String cacheKey;
            WebSpeciesObservationDataProvider dataProvider;

            // Get cached information.
            cacheKey      = Settings.Default.SpeciesObservationDataProviderDictionaryCacheKey + ":" + context.Locale.ISOCode;
            dataProviders = (Dictionary <Int32, WebSpeciesObservationDataProvider>)(context.GetCachedObject(cacheKey));

            if (dataProviders.IsEmpty())
            {
                // Data not in cache. Get information from database.
                dataProviders = new Dictionary <int, WebSpeciesObservationDataProvider>();
                using (DataReader dataReader = context.GetDatabase().GetSpeciesObservationDataProviders(context.Locale.Id))
                {
                    while (dataReader.Read())
                    {
                        dataProvider = new WebSpeciesObservationDataProvider();
                        dataProvider.LoadData(dataReader);
                        dataProviders.Add(dataProvider.Id, dataProvider);
                    }
                }

                // Add information to cache.
                context.AddCachedObject(cacheKey,
                                        dataProviders,
                                        DateTime.Now + new TimeSpan(1, 0, 0, 0),
                                        CacheItemPriority.High);
            }

            return(dataProviders);
        }