コード例 #1
0
        static EFCachedQueryExtensions()
        {
            var serviceProvider = EFStaticServiceProvider.Instance;

            _defaultCacheServiceProvider = serviceProvider.GetRequiredService <IEFCacheServiceProvider>();
            _defaultCacheKeyProvider     = serviceProvider.GetRequiredService <IEFCacheKeyProvider>();
        }
 /// <summary>
 /// Cache Dependencies Calculator
 /// </summary>
 public EFCacheDependenciesProcessor(
     ILogger <EFCacheDependenciesProcessor> logger,
     IEFCacheServiceProvider cacheServiceProvider)
 {
     _logger = logger;
     _cacheServiceProvider = cacheServiceProvider;
 }
コード例 #3
0
 /// <summary>
 /// Cache Dependencies Calculator
 /// </summary>
 public EFCacheDependenciesProcessor(
     IEFDebugLogger logger,
     IEFCacheServiceProvider cacheServiceProvider,
     IEFSqlCommandsProcessor sqlCommandsProcessor)
 {
     _logger = logger;
     _cacheServiceProvider = cacheServiceProvider;
     _sqlCommandsProcessor = sqlCommandsProcessor;
 }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 /// <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);
 }
コード例 #6
0
 /// <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);
 }
コード例 #7
0
        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>
 /// 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;
 }
コード例 #9
0
 /// <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;
 }
コード例 #10
0
 private void InitCacheProvider()
 {
     try
     {
         if (serviceProvider != null) cacheProvider = serviceProvider.GetService<IEFCacheServiceProvider>();
     }
     catch (Exception ex)
     {
         // Don't fall over when caching not set up
         Log("EFCore Caching not setup");
         Log(ex.GetBaseException().Message);
     }
 }
コード例 #11
0
 /// <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;
 }
コード例 #12
0
 /// <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;
 }
コード例 #13
0
 /// <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);
 }
コード例 #14
0
        /// <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));
        }
コード例 #15
0
        private async Task <int> SaveChangesAndCleanCache(IEFCacheServiceProvider efCacheServiceProvider, CancellationToken cancellationToken)
        {
            var changedEntityNames = this.GetChangedEntityNames()
                                     .Where(x => !x.Contains("SeedWork"))
                                     .ToArray();

            ChangeTracker.AutoDetectChangesEnabled = false; // for performance reasons, to avoid calling DetectChanges() again.

            var result = await base.SaveChangesAsync(cancellationToken);

            ChangeTracker.AutoDetectChangesEnabled = true;
            efCacheServiceProvider.InvalidateCacheDependencies(changedEntityNames);
            return(result);
        }
コード例 #16
0
 /// <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);
 }
コード例 #17
0
 /// <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);
 }
コード例 #18
0
 /// <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);
 }
コード例 #19
0
 /// <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;
 }
コード例 #20
0
        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>
        /// Cache Dependencies Calculator
        /// </summary>
        public EFCacheDependenciesProcessor(
            IEFDebugLogger logger,
            IEFCacheServiceProvider cacheServiceProvider,
            IEFSqlCommandsProcessor sqlCommandsProcessor,
            IOptions <EFCoreSecondLevelCacheSettings> cacheSettings)
        {
            _logger = logger;
            _cacheServiceProvider = cacheServiceProvider;
            _sqlCommandsProcessor = sqlCommandsProcessor;

            if (cacheSettings == null)
            {
                throw new ArgumentNullException(nameof(cacheSettings));
            }

            _cacheSettings = cacheSettings.Value;
        }
コード例 #22
0
        /// <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);
        }
コード例 #23
0
 public EFCacheServiceProviderTests()
 {
     _cacheService = TestsBase.GetInMemoryCacheServiceProvider();
     //_cacheService = TestsBase.GetRedisCacheServiceProvider();
 }
コード例 #24
0
 public EFCacheServiceProviderTests()
 {
     _cacheService = new EFCacheServiceProvider();
 }
コード例 #25
0
 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");
 }
コード例 #26
0
 public EFCacheServiceProviderTests()
 {
     _cacheService = new EFCacheServiceProvider();
 }
コード例 #27
0
 /// <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));
 }
コード例 #28
0
ファイル: DataService.cs プロジェクト: LykkeBusiness/chest
 /// <summary>
 /// Initializes a new instance of the <see cref="DataService"/> class.
 /// </summary>
 /// <param name="context">An instance of <see cref="ApplicationDbContext"/> to communicate with underlying database</param>
 /// <param name="cacheProvider">An instance of <see cref="IEFCacheServiceProvider"/> to control EfCore 2nd level cache</param>
 public DataService(ApplicationDbContext context, IEFCacheServiceProvider cacheProvider)
 {
     _context       = context;
     _cacheProvider = cacheProvider;
 }
コード例 #29
0
 /// <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));
 }
コード例 #30
0
 public EFCacheDBContext(DbContextOptions <TypiconDBContext> options, IEFCacheServiceProvider serviceProvider) : base(options)
 {
     this.serviceProvider = serviceProvider ?? throw new ArgumentNullException("serviceProvider in EFCacheDBContext");
 }
コード例 #31
0
 public SampleContext(IConfigurationRoot configuration, IEFCacheServiceProvider cacheServiceProvider)
 {
     _configuration = configuration;
     _cacheServiceProvider = cacheServiceProvider;
 }