static EFCachedQueryExtensions() { var serviceProvider = EFStaticServiceProvider.Instance; _defaultCacheServiceProvider = serviceProvider.GetRequiredService <IEFCacheServiceProvider>(); _defaultCacheKeyProvider = serviceProvider.GetRequiredService <IEFCacheKeyProvider>(); }
private static EFCacheKey CacheKey <T>(IQueryable <T> queryable, IEFCacheKeyProvider cacheKeyProvider) { var saltKey = SaltKey(queryable.Expression); var cacheKey = cacheKeyProvider.GetEFCacheKey(queryable, queryable.Expression, saltKey); return(cacheKey); }
/// <summary> /// Returns a new query where the entities returned will be cached in the IEFCacheServiceProvider. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item. If you set it to null or don't specify it, the global `new CacheManager.Core.ConfigurationBuilder().WithExpiration()` setting will be used automatically.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> /// <returns>Provides functionality to evaluate queries against a specific data source.</returns> public static IQueryable Cacheable( this IQueryable query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { var type = typeof(EFCachedQueryable <>).MakeGenericType(query.ElementType); var cachedQueryable = Activator.CreateInstance(type, query, cachePolicy, debugInfo, cacheKeyProvider, cacheServiceProvider); return(cachedQueryable as IQueryable); }
/// <summary> /// Provides functionality to evaluate queries against a specific data source. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="efCache">EFCachePolicy determines the AbsoluteExpiration time and Priority of the cache.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> public EFCachedQueryable( IQueryable <TType> query, EFCachePolicy efCache, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { _query = query; _provider = new EFCachedQueryProvider <TType>(query, efCache, debugInfo, cacheKeyProvider, cacheServiceProvider); }
/// <summary> /// Provides functionality to evaluate queries against a specific data source. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="saltKey">If you think the computed hash of the query is not enough, set this value.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> public EFCachedQueryable( IQueryable <TType> query, string saltKey, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { _query = markAsNoTracking(query); _provider = new EFCachedQueryProvider <TType>(_query, saltKey, debugInfo, cacheKeyProvider, cacheServiceProvider); }
public EFCacheRepositoryFactory(IRepositoryFactory repositoryFactory, IServiceProvider serviceProvider) { this.repositoryFactory = repositoryFactory ?? throw new ArgumentNullException("repositoryFactory in EFCacheRepositoryFactory"); if (serviceProvider == null) { throw new ArgumentNullException("serviceProvider in EFCacheRepositoryFactory"); } cacheKeyProvider = serviceProvider.GetService <IEFCacheKeyProvider>(); cacheServiceProvider = serviceProvider.GetService <IEFCacheServiceProvider>(); }
/// <summary> /// Defines methods to create and execute queries that are described by an System.Linq.IQueryable object. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">The Cache Service Provider.</param> public EFCachedQueryProvider( IQueryable <TType> query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { _query = query; _cachePolicy = cachePolicy; _debugInfo = debugInfo; _cacheKeyProvider = cacheKeyProvider; _cacheServiceProvider = cacheServiceProvider; }
/// <summary> /// Helps processing SecondLevelCacheInterceptor /// </summary> public DbCommandInterceptorProcessor( IEFCacheServiceProvider cacheService, IEFCacheDependenciesProcessor cacheDependenciesProcessor, IEFCacheKeyProvider cacheKeyProvider, IEFCachePolicyParser cachePolicyParser, ILogger <DbCommandInterceptorProcessor> logger) { _cacheService = cacheService; _cacheDependenciesProcessor = cacheDependenciesProcessor; _cacheKeyProvider = cacheKeyProvider; _cachePolicyParser = cachePolicyParser; _logger = logger; }
/// <summary> /// Defines methods to create and execute queries that are described by an System.Linq.IQueryable object. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">The Cache Service Provider.</param> public EFMaterializer( IQueryable query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { _query = query; _cachePolicy = cachePolicy; _debugInfo = debugInfo; _cacheKeyProvider = cacheKeyProvider; _cacheServiceProvider = cacheServiceProvider; }
/// <summary> /// Defines methods to create and execute queries that are described by an System.Linq.IQueryable object. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="saltKey">If you think the computed hash of the query is not enough, set this value.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">The Cache Service Provider.</param> public EFCachedQueryProvider( IQueryable <TType> query, string saltKey, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { _query = query; _saltKey = saltKey; _debugInfo = debugInfo; _cacheKeyProvider = cacheKeyProvider; _cacheServiceProvider = cacheServiceProvider; }
/// <summary> /// Provides functionality to evaluate queries against a specific data source. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="saltKey">If you think the computed hash of the query is not enough, set this value.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> public EFCachedQueryable( IQueryable <TType> query, string saltKey, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { SaltKey = saltKey; DebugInfo = debugInfo; CacheKeyProvider = cacheKeyProvider; CacheServiceProvider = cacheServiceProvider; Query = query.MarkAsNoTracking(); _provider = new EFCachedQueryProvider <TType>(Query, saltKey, debugInfo, cacheKeyProvider, cacheServiceProvider); }
/// <summary> /// Provides functionality to evaluate queries against a specific data source. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> public EFCachedQueryable( IQueryable <TType> query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { CachePolicy = cachePolicy; DebugInfo = debugInfo; CacheKeyProvider = cacheKeyProvider; CacheServiceProvider = cacheServiceProvider; Query = query.MarkAsNoTracking(); _provider = new EFCachedQueryProvider(Query, cachePolicy, debugInfo, cacheKeyProvider, cacheServiceProvider); }
/// <summary> /// Provides functionality to evaluate queries against a specific data source. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> public EFCachedDbSet( DbSet <TType> query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { CachePolicy = cachePolicy; DebugInfo = debugInfo; CacheKeyProvider = cacheKeyProvider; CacheServiceProvider = cacheServiceProvider; Query = query; _provider = new EFCachedQueryProvider <TType>(Query, cachePolicy, debugInfo, cacheKeyProvider, cacheServiceProvider); }
/// <summary> /// Returns a new query where the entities returned will be cached in the IEFCacheServiceProvider. /// </summary> /// <typeparam name="TType">Entity type.</typeparam> /// <param name="query">The input EF query.</param> /// <param name="efCachePolicy">Determines the AbsoluteExpiration time and Priority of the cache.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> /// <returns></returns> public static EFCachedQueryable <TType> Cacheable <TType>( this IQueryable <TType> query, EFCachePolicy efCachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { var noTrackingQuery = query.toAsNoTrackingQuery(); if (isLinqToObjectsQuery(noTrackingQuery)) { return(new EFCachedQueryable <TType>( query, efCachePolicy, debugInfo, _defaultLinqToObjectsCacheKeyProvider, cacheServiceProvider)); } return(new EFCachedQueryable <TType>( noTrackingQuery, efCachePolicy, debugInfo, cacheKeyProvider, cacheServiceProvider)); }
/// <summary> /// Provides functionality to evaluate queries against a specific data source. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="saltKey">If you think the computed hash of the query is not enough, set this value.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> public EFCachedDbSet( DbSet <TType> query, string saltKey, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { SaltKey = saltKey; DebugInfo = debugInfo; CacheKeyProvider = cacheKeyProvider; CacheServiceProvider = cacheServiceProvider; Query = query; _provider = new EFCachedQueryProvider <TType>(Query, saltKey, debugInfo, cacheKeyProvider, cacheServiceProvider); }
/// <summary> /// Helps processing SecondLevelCacheInterceptor /// </summary> public DbCommandInterceptorProcessor( IEFDebugLogger logger, IEFCacheServiceProvider cacheService, IEFCacheDependenciesProcessor cacheDependenciesProcessor, IEFCacheKeyProvider cacheKeyProvider, IEFCachePolicyParser cachePolicyParser, IEFSqlCommandsProcessor sqlCommandsProcessor) { _cacheService = cacheService; _cacheDependenciesProcessor = cacheDependenciesProcessor; _cacheKeyProvider = cacheKeyProvider; _cachePolicyParser = cachePolicyParser; _logger = logger; _sqlCommandsProcessor = sqlCommandsProcessor; }
private static void configureProviders() { if (_defaultCacheServiceProvider != null && _defaultCacheKeyProvider != null) { return; } var applicationServices = EFServiceProvider.ApplicationServices; if (applicationServices == null) { throw new InvalidOperationException("Please add `AddEFSecondLevelCache` method to `IServiceCollection` and also add `UseEFSecondLevelCache` method to `IApplicationBuilder`."); } _defaultCacheServiceProvider = applicationServices.GetService <IEFCacheServiceProvider>(); _defaultCacheKeyProvider = applicationServices.GetService <IEFCacheKeyProvider>(); }
/// <summary> /// Provides functionality to evaluate queries against a specific data source. /// </summary> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> public EFCachedDbSet( DbSet <TType> query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { CachePolicy = cachePolicy; DebugInfo = debugInfo; CacheKeyProvider = cacheKeyProvider; CacheServiceProvider = cacheServiceProvider; Query = query; var queryable = Query.AsNoTracking().AsQueryable(); ElementType = queryable.ElementType; Expression = queryable.Expression; _provider = new EFCachedQueryProvider(queryable, cachePolicy, debugInfo, cacheKeyProvider, cacheServiceProvider); }
/// <summary> /// Helps processing SecondLevelCacheInterceptor /// </summary> public DbCommandInterceptorProcessor( IEFDebugLogger logger, IEFCacheServiceProvider cacheService, IEFCacheDependenciesProcessor cacheDependenciesProcessor, IEFCacheKeyProvider cacheKeyProvider, IEFCachePolicyParser cachePolicyParser, IEFSqlCommandsProcessor sqlCommandsProcessor, IOptions <EFCoreSecondLevelCacheSettings> cacheSettings) { _cacheService = cacheService; _cacheDependenciesProcessor = cacheDependenciesProcessor; _cacheKeyProvider = cacheKeyProvider; _cachePolicyParser = cachePolicyParser; _logger = logger; _sqlCommandsProcessor = sqlCommandsProcessor; if (cacheSettings == null) { throw new ArgumentNullException(nameof(cacheSettings)); } _cacheSettings = cacheSettings.Value; }
/// <summary> /// Returns a new query where the entities returned will be cached in the IEFCacheServiceProvider. /// </summary> /// <typeparam name="TType">Entity type.</typeparam> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item. If you set it to null or don't specify it, the global `new CacheManager.Core.ConfigurationBuilder().WithExpiration()` setting will be used automatically.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> /// <returns></returns> public static EFCachedDbSet <TType> Cacheable <TType>( this DbSet <TType> query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) where TType : class { return(new EFCachedDbSet <TType>(query, cachePolicy, debugInfo, cacheKeyProvider, cacheServiceProvider)); }
public EFCacheRepository(IRepository <DomainType> repository, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { this.repository = repository ?? throw new ArgumentNullException("repository in CachingRepository"); this.cacheKeyProvider = cacheKeyProvider ?? throw new ArgumentNullException("cacheKeyProvider in CachingRepository"); this.cacheServiceProvider = cacheServiceProvider ?? throw new ArgumentNullException("cacheServiceProvider in CachingRepository"); }
/// <summary> /// Returns a new query where the entities returned will be cached in the IEFCacheServiceProvider. /// </summary> /// <typeparam name="TType">Entity type.</typeparam> /// <param name="query">The input EF query.</param> /// <param name="cachePolicy">Defines the expiration mode of the cache item. If you set it to null or don't specify it, the global `new CacheManager.Core.ConfigurationBuilder().WithExpiration()` setting will be used automatically.</param> /// <param name="debugInfo">Stores the debug information of the caching process.</param> /// <param name="cacheKeyProvider">Gets an EF query and returns its hash to store in the cache.</param> /// <param name="cacheServiceProvider">Cache Service Provider.</param> /// <returns></returns> public static EFCachedQueryable <TType> Cacheable <TType>( this IQueryable <TType> query, EFCachePolicy cachePolicy, EFCacheDebugInfo debugInfo, IEFCacheKeyProvider cacheKeyProvider, IEFCacheServiceProvider cacheServiceProvider) { return(new EFCachedQueryable <TType>(query, cachePolicy, debugInfo, cacheKeyProvider, cacheServiceProvider)); }
static EFCachedQueryExtension() { _defaultCacheServiceProvider = new EFCacheServiceProvider(); _defaultCacheKeyProvider = new EFCacheKeyProvider(new EFCacheKeyHashProvider()); _defaultLinqToObjectsCacheKeyProvider = new LinqToObjectsCacheKeyProvider(new EFCacheKeyHashProvider()); }