private IQueryable <T> BuildQueryFromProviders <T>(IEnumerable <string> providerNames) where T : class, IData { if (providerNames == null) { providerNames = DataProviderRegistry.GetDataProviderNamesByInterfaceType(typeof(T)); } var queries = new List <IQueryable <T> >(); foreach (string providerName in providerNames) { IQueryable <T> query = DataProviderPluginFacade.GetData <T>(providerName); queries.Add(query); } bool resultIsCached = queries.Count == 1 && queries[0] is ICachedQuery; if (resultIsCached) { return(queries[0]); } return(new DataFacadeQueryable <T>(queries)); }
public T GetDataFromDataSourceId <T>(DataSourceId dataSourceId, bool useCaching) where T : class, IData { if (null == dataSourceId) { throw new ArgumentNullException("dataSourceId"); } useCaching = useCaching && DataCachingFacade.IsTypeCacheable(typeof(T)); using (new DataScope(dataSourceId.DataScopeIdentifier, dataSourceId.LocaleScope)) { T resultData = null; string cacheKey = string.Empty; if (useCaching) { cacheKey = dataSourceId.ToString(); resultData = (T)_dataBySourceIdCache.Get(cacheKey); } if (resultData == null) { resultData = DataProviderPluginFacade.GetData <T>(dataSourceId.ProviderName, dataSourceId.DataId); if (useCaching && resultData != null && _dataBySourceIdCache.Enabled) { _dataBySourceIdCache.Add(cacheKey, resultData); } } if (useCaching && resultData != null) { resultData = DataWrappingFacade.Wrap(resultData); } DataInterceptor dataInterceptor; this.DataInterceptors.TryGetValue(typeof(T), out dataInterceptor); if (dataInterceptor != null) { try { resultData = dataInterceptor.InterceptGetDataFromDataSourceId <T>(resultData); } catch (Exception ex) { Log.LogError(LogTitle, "Calling data interceptor failed with the following exception"); Log.LogError(LogTitle, ex); } } return(resultData); } }
public T GetDataFromDataSourceId <T>(DataSourceId dataSourceId, bool useCaching) where T : class, IData { Verify.ArgumentNotNull(dataSourceId, nameof(dataSourceId)); useCaching = useCaching && DataCachingFacade.IsTypeCacheable(typeof(T)); using (new DataScope(dataSourceId.DataScopeIdentifier, dataSourceId.LocaleScope)) { T resultData = null; string cacheKey = string.Empty; if (useCaching) { cacheKey = dataSourceId.ToString(); resultData = (T)_dataBySourceIdCache.Get(cacheKey); } if (resultData == null) { resultData = DataProviderPluginFacade.GetData <T>(dataSourceId.ProviderName, dataSourceId.DataId); if (useCaching && resultData != null && _dataBySourceIdCache.Enabled) { _dataBySourceIdCache.Add(cacheKey, resultData); } } if (useCaching && resultData != null) { resultData = DataWrappingFacade.Wrap(resultData); } foreach (var dataInterceptor in GetDataInterceptors(typeof(T))) { try { resultData = dataInterceptor.InterceptGetDataFromDataSourceId <T>(resultData); } catch (Exception ex) { Log.LogError(LogTitle, ex); } } return(resultData); } }
public IQueryable <T> GetData <T>(bool useCaching, IEnumerable <string> providerNames) where T : class, IData { IQueryable <T> resultQueryable; if (DataProviderRegistry.AllInterfaces.Contains(typeof(T))) { if (useCaching && DataCachingFacade.IsDataAccessCacheEnabled(typeof(T))) { resultQueryable = DataCachingFacade.GetDataFromCache <T>(); } else { if (providerNames == null) { providerNames = DataProviderRegistry.GetDataProviderNamesByInterfaceType(typeof(T)); } List <IQueryable <T> > queryables = new List <IQueryable <T> >(); foreach (string providerName in providerNames) { IQueryable <T> queryable = DataProviderPluginFacade.GetData <T>(providerName); queryables.Add(queryable); } bool resultIsCached = queryables.Count == 1 && queryables[0] is ICachedQuery; if (resultIsCached) { resultQueryable = queryables[0]; } else { var multipleSourceQueryable = new DataFacadeQueryable <T>(queryables); resultQueryable = multipleSourceQueryable; } } } else { DataProviderRegistry.CheckInitializationErrors(typeof(T)); if (!typeof(T).GetCustomInterfaceAttributes <AutoUpdatebleAttribute>().Any()) { throw new ArgumentException(string.Format("The given interface type ({0}) is not supported by any data providers", typeof(T))); } resultQueryable = new List <T>().AsQueryable(); } DataInterceptor dataInterceptor; this.DataInterceptors.TryGetValue(typeof(T), out dataInterceptor); if (dataInterceptor != null) { try { resultQueryable = dataInterceptor.InterceptGetData <T>(resultQueryable); } catch (Exception ex) { Log.LogError(LogTitle, "Calling data interceptor failed with the following exception"); Log.LogError(LogTitle, ex); } } return(resultQueryable); }