瀏覽代碼

更换二级缓存中间件

懒得勤快 4 年之前
父節點
當前提交
c3e75bc282

+ 8 - 2
src/Masuit.MyBlogs.Core/Extensions/MiddlewareExtension.cs

@@ -26,10 +26,16 @@ namespace Masuit.MyBlogs.Core.Extensions
         /// <returns></returns>
         /// <returns></returns>
         public static IServiceCollection AddCacheConfig(this IServiceCollection services)
         public static IServiceCollection AddCacheConfig(this IServiceCollection services)
         {
         {
+            var jss = new JsonSerializerSettings
+            {
+                NullValueHandling = NullValueHandling.Ignore,
+                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
+                TypeNameHandling = TypeNameHandling.Auto
+            };
             services.AddSingleton(typeof(ICacheManager<>), typeof(BaseCacheManager<>));
             services.AddSingleton(typeof(ICacheManager<>), typeof(BaseCacheManager<>));
-            services.AddSingleton(new ConfigurationBuilder().WithJsonSerializer().WithMicrosoftMemoryCacheHandle().WithExpiration(ExpirationMode.Absolute, TimeSpan.FromMinutes(5))
+            services.AddSingleton(new ConfigurationBuilder().WithJsonSerializer(jss, jss).WithMicrosoftMemoryCacheHandle().WithExpiration(ExpirationMode.Absolute, TimeSpan.FromMinutes(5))
                 .And
                 .And
-                .WithRedisConfiguration("redis", AppConfig.Redis).WithMaxRetries(50).WithRetryTimeout(100).WithRedisCacheHandle("redis").WithExpiration(ExpirationMode.Absolute, TimeSpan.FromMinutes(5)).Build());
+                .WithRedisConfiguration("redis", AppConfig.Redis, 1).WithGzJsonSerializer(jss, jss).WithMaxRetries(50).WithRetryTimeout(100).WithRedisCacheHandle("redis").WithExpiration(ExpirationMode.Absolute, TimeSpan.FromMinutes(5)).Build());
             return services;
             return services;
         }
         }
 
 

+ 36 - 40
src/Masuit.MyBlogs.Core/Infrastructure/Repository/BaseRepository.cs

@@ -1,12 +1,12 @@
 using AutoMapper;
 using AutoMapper;
 using AutoMapper.QueryableExtensions;
 using AutoMapper.QueryableExtensions;
+using EFCoreSecondLevelCacheInterceptor;
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
 using Masuit.Tools;
 using Masuit.Tools;
 using Masuit.Tools.Core.AspNetCore;
 using Masuit.Tools.Core.AspNetCore;
 using Masuit.Tools.Models;
 using Masuit.Tools.Models;
 using Masuit.Tools.Systems;
 using Masuit.Tools.Systems;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.Caching.Memory;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
@@ -25,10 +25,6 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         public virtual DataContext DataContext { get; set; }
         public virtual DataContext DataContext { get; set; }
 
 
         public MapperConfiguration MapperConfig { get; set; }
         public MapperConfiguration MapperConfig { get; set; }
-        public static MemoryCacheEntryOptions CacheOptions => new MemoryCacheEntryOptions()
-        {
-            AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
-        };
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -54,16 +50,16 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
         public virtual IEnumerable<T> GetAllFromCache()
         public virtual IEnumerable<T> GetAllFromCache()
         {
         {
-            return DataContext.Set<T>().FromCache(CacheOptions);
+            return DataContext.Set<T>().Cacheable().AsEnumerable();
         }
         }
 
 
         /// <summary>
         /// <summary>
         /// 从二级缓存获取所有实体
         /// 从二级缓存获取所有实体
         /// </summary>
         /// </summary>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetAllFromCacheAsync()
+        public Task<List<T>> GetAllFromCacheAsync()
         {
         {
-            return DataContext.Set<T>().FromCacheAsync(CacheOptions);
+            return DataContext.Set<T>().Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -81,9 +77,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// </summary>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public virtual IEnumerable<TDto> GetAllFromCache<TDto>() where TDto : class
+        public virtual List<TDto> GetAllFromCache<TDto>() where TDto : class
         {
         {
-            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(CacheOptions);
+            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).Cacheable().ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -91,9 +87,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// </summary>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class
+        public Task<List<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class
         {
         {
-            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOptions);
+            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -127,9 +123,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public virtual IEnumerable<T> GetAllFromCache<TS>(Expression<Func<T, TS>> orderby, bool isAsc = true)
+        public virtual List<T> GetAllFromCache<TS>(Expression<Func<T, TS>> orderby, bool isAsc = true)
         {
         {
-            return GetAll(orderby, isAsc).FromCache(CacheOptions);
+            return GetAll(orderby, isAsc).Cacheable().ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -139,9 +135,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
+        public Task<List<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
         {
         {
-            return GetAll(orderby, isAsc).FromCacheAsync(CacheOptions);
+            return GetAll(orderby, isAsc).Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -165,9 +161,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public virtual IEnumerable<TDto> GetAllFromCache<TS, TDto>(Expression<Func<T, TS>> orderby, bool isAsc = true) where TDto : class
+        public virtual List<TDto> GetAllFromCache<TS, TDto>(Expression<Func<T, TS>> orderby, bool isAsc = true) where TDto : class
         {
         {
-            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(CacheOptions);
+            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).Cacheable().ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -178,9 +174,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
+        public Task<List<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
         {
-            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOptions);
+            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -211,9 +207,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public virtual IEnumerable<T> GetQueryFromCache(Expression<Func<T, bool>> where)
+        public virtual List<T> GetQueryFromCache(Expression<Func<T, bool>> @where)
         {
         {
-            return DataContext.Set<T>().Where(where).FromCache(CacheOptions);
+            return DataContext.Set<T>().Where(where).Cacheable().ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -221,9 +217,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where)
+        public Task<List<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where)
         {
         {
-            return DataContext.Set<T>().Where(where).FromCacheAsync(CacheOptions);
+            return DataContext.Set<T>().Where(where).Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -234,9 +230,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public virtual IEnumerable<T> GetQueryFromCache<TS>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
+        public virtual List<T> GetQueryFromCache<TS>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
         {
         {
-            return GetQuery(where, orderby, isAsc).FromCache(CacheOptions);
+            return GetQuery(where, orderby, isAsc).Cacheable().ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -247,9 +243,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
+        public Task<List<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
         {
         {
-            return GetQuery(where, orderby, isAsc).FromCacheAsync(CacheOptions);
+            return GetQuery(where, orderby, isAsc).Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -261,9 +257,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
+        public Task<List<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
         {
-            return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOptions);
+            return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -318,9 +314,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>实体集合</returns>
         /// <returns>实体集合</returns>
-        public virtual IEnumerable<TDto> GetQueryFromCache<TDto>(Expression<Func<T, bool>> where) where TDto : class
+        public virtual List<TDto> GetQueryFromCache<TDto>(Expression<Func<T, bool>> where) where TDto : class
         {
         {
-            return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(CacheOptions);
+            return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).Cacheable().ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -328,9 +324,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
+        public Task<List<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
         {
         {
-            return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOptions);
+            return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).Cacheable().ToListAsync();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -342,9 +338,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public virtual IEnumerable<TDto> GetQueryFromCache<TS, TDto>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true) where TDto : class
+        public virtual List<TDto> GetQueryFromCache<TS, TDto>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true) where TDto : class
         {
         {
-            return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(CacheOptions);
+            return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).Cacheable().ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -925,7 +921,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
                 page = 1;
                 page = 1;
             }
             }
 
 
-            var list = query.Skip(size * (page - 1)).Take(size).FromCache(BaseRepository<T>.CacheOptions).ToList();
+            var list = query.Skip(size * (page - 1)).Take(size).Cacheable().ToList();
             return new PagedList<T>(list, page, size, totalCount);
             return new PagedList<T>(list, page, size, totalCount);
         }
         }
 
 
@@ -950,7 +946,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
                 page = 1;
                 page = 1;
             }
             }
 
 
-            var list = await query.Skip(size * (page - 1)).Take(size).FromCacheAsync(BaseRepository<T>.CacheOptions);
+            var list = await query.Skip(size * (page - 1)).Take(size).Cacheable().ToListAsync();
             return new PagedList<T>(list.ToList(), page, size, totalCount);
             return new PagedList<T>(list.ToList(), page, size, totalCount);
         }
         }
 
 
@@ -1031,7 +1027,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
                 page = 1;
                 page = 1;
             }
             }
 
 
-            var list = query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).FromCache(BaseRepository<T>.CacheOptions).ToList();
+            var list = query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).Cacheable().ToList();
             return new PagedList<TDto>(list, page, size, totalCount);
             return new PagedList<TDto>(list, page, size, totalCount);
         }
         }
 
 
@@ -1058,7 +1054,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
                 page = 1;
                 page = 1;
             }
             }
 
 
-            var list = await query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).FromCacheAsync(BaseRepository<T>.CacheOptions);
+            var list = await query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).Cacheable().ToListAsync();
             return new PagedList<TDto>(list.ToList(), page, size, totalCount);
             return new PagedList<TDto>(list.ToList(), page, size, totalCount);
         }
         }
     }
     }

+ 15 - 15
src/Masuit.MyBlogs.Core/Infrastructure/Repository/Interface/IBaseRepository.cs

@@ -32,7 +32,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// 从二级缓存获取所有实体
         /// 从二级缓存获取所有实体
         /// </summary>
         /// </summary>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetAllFromCacheAsync();
+        Task<List<T>> GetAllFromCacheAsync();
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -46,14 +46,14 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// </summary>
         /// </summary>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        IEnumerable<TDto> GetAllFromCache<TDto>() where TDto : class;
+        List<TDto> GetAllFromCache<TDto>() where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
         /// </summary>
         /// </summary>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class;
+        Task<List<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -80,7 +80,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        IEnumerable<T> GetAllFromCache<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true);
+        List<T> GetAllFromCache<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true);
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -89,7 +89,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true);
+        Task<List<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true);
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -109,7 +109,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        IEnumerable<TDto> GetAllFromCache<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
+        List<TDto> GetAllFromCache<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -119,7 +119,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
+        Task<List<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合
         /// 基本查询方法,获取一个集合
@@ -162,14 +162,14 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        IEnumerable<T> GetQueryFromCache(Expression<Func<T, bool>> @where);
+        List<T> GetQueryFromCache(Expression<Func<T, bool>> @where);
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where);
+        Task<List<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where);
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
@@ -179,7 +179,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        IEnumerable<T> GetQueryFromCache<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true);
+        List<T> GetQueryFromCache<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true);
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
@@ -189,21 +189,21 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true);
+        Task<List<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true);
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        IEnumerable<TDto> GetQueryFromCache<TDto>(Expression<Func<T, bool>> @where) where TDto : class;
+        List<TDto> GetQueryFromCache<TDto>(Expression<Func<T, bool>> @where) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class;
+        Task<List<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
@@ -214,7 +214,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        IEnumerable<TDto> GetQueryFromCache<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
+        List<TDto> GetQueryFromCache<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
@@ -225,7 +225,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
+        Task<List<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合(不跟踪实体)
         /// 基本查询方法,获取一个集合(不跟踪实体)

+ 7 - 6
src/Masuit.MyBlogs.Core/Infrastructure/Repository/MenuRepository.cs

@@ -1,10 +1,11 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Linq.Expressions;
+using EFCoreSecondLevelCacheInterceptor;
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
 using Masuit.MyBlogs.Core.Models.Entity;
 using Masuit.MyBlogs.Core.Models.Entity;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
 using Z.EntityFramework.Plus;
 using Z.EntityFramework.Plus;
 
 
 namespace Masuit.MyBlogs.Core.Infrastructure.Repository
 namespace Masuit.MyBlogs.Core.Infrastructure.Repository
@@ -40,9 +41,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public override IEnumerable<Menu> GetQueryFromCache(Expression<Func<Menu, bool>> @where)
+        public override List<Menu> GetQueryFromCache(Expression<Func<Menu, bool>> @where)
         {
         {
-            return DataContext.Menu.Include(m => m.Children).ThenInclude(m => m.Children).ThenInclude(m => m.Children).Where(where).FromCache(CacheOptions);
+            return DataContext.Menu.Include(m => m.Children).ThenInclude(m => m.Children).ThenInclude(m => m.Children).Where(where).Cacheable().ToList();
         }
         }
     }
     }
 }
 }

+ 14 - 14
src/Masuit.MyBlogs.Core/Infrastructure/Services/BaseService.cs

@@ -58,7 +58,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// 从二级缓存获取所有实体
         /// 从二级缓存获取所有实体
         /// </summary>
         /// </summary>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetAllFromCacheAsync()
+        public Task<List<T>> GetAllFromCacheAsync()
         {
         {
             return BaseDal.GetAllFromCacheAsync();
             return BaseDal.GetAllFromCacheAsync();
         }
         }
@@ -88,7 +88,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// </summary>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class
+        public Task<List<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class
         {
         {
             return BaseDal.GetAllFromCacheAsync<TDto>();
             return BaseDal.GetAllFromCacheAsync<TDto>();
         }
         }
@@ -136,9 +136,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
+        public Task<List<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
         {
         {
-            return BaseDal.GetAllFromCacheAsync(orderby, isAsc);
+            return BaseDal.GetAllFromCacheAsync(@orderby, isAsc);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -175,9 +175,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
+        public Task<List<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
         {
-            return BaseDal.GetAllFromCacheAsync<TS, TDto>(orderby, isAsc);
+            return BaseDal.GetAllFromCacheAsync<TS, TDto>(@orderby, isAsc);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -243,9 +243,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where)
+        public Task<List<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where)
         {
         {
-            return BaseDal.GetQueryFromCacheAsync(where);
+            return BaseDal.GetQueryFromCacheAsync(@where);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -269,9 +269,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
+        public Task<List<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
         {
         {
-            return BaseDal.GetQueryFromCacheAsync(where, orderby, isAsc);
+            return BaseDal.GetQueryFromCacheAsync(@where, @orderby, isAsc);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -289,9 +289,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
+        public Task<List<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
         {
         {
-            return BaseDal.GetQueryFromCacheAsync<TDto>(where);
+            return BaseDal.GetQueryFromCacheAsync<TDto>(@where);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -317,9 +317,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        public Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
+        public Task<List<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
         {
-            return BaseDal.GetQueryFromCacheAsync<TS, TDto>(where, orderby, isAsc);
+            return BaseDal.GetQueryFromCacheAsync<TS, TDto>(@where, @orderby, isAsc);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 8 - 8
src/Masuit.MyBlogs.Core/Infrastructure/Services/Interface/IBaseService.cs

@@ -31,7 +31,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// 从二级缓存获取所有实体
         /// 从二级缓存获取所有实体
         /// </summary>
         /// </summary>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetAllFromCacheAsync();
+        Task<List<T>> GetAllFromCacheAsync();
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -52,7 +52,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// </summary>
         /// </summary>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <typeparam name="TDto">映射实体</typeparam>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class;
+        Task<List<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -88,7 +88,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true);
+        Task<List<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true);
 
 
         /// <summary>
         /// <summary>
         /// 获取所有实体
         /// 获取所有实体
@@ -118,7 +118,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// <param name="orderby">排序字段</param>
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
+        Task<List<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合
         /// 基本查询方法,获取一个集合
@@ -167,7 +167,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where);
+        Task<List<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where);
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
         /// 基本查询方法,获取一个集合,优先从二级缓存读取
@@ -187,7 +187,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true);
+        Task<List<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true);
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
@@ -201,7 +201,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// </summary>
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <param name="where">查询条件</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class;
+        Task<List<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
         /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
@@ -223,7 +223,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// <param name="orderby">排序方式</param>
         /// <param name="orderby">排序方式</param>
         /// <param name="isAsc">是否升序</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>还未执行的SQL语句</returns>
         /// <returns>还未执行的SQL语句</returns>
-        Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
+        Task<List<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class;
 
 
         /// <summary>
         /// <summary>
         /// 基本查询方法,获取一个集合(不跟踪实体)
         /// 基本查询方法,获取一个集合(不跟踪实体)

+ 1 - 0
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -41,6 +41,7 @@
         <PackageReference Include="CHTCHSConv" Version="1.0.0" />
         <PackageReference Include="CHTCHSConv" Version="1.0.0" />
         <PackageReference Include="CLRStats" Version="1.0.0" />
         <PackageReference Include="CLRStats" Version="1.0.0" />
         <PackageReference Include="CSRedisCore" Version="3.6.6" />
         <PackageReference Include="CSRedisCore" Version="3.6.6" />
+        <PackageReference Include="EFCoreSecondLevelCacheInterceptor" Version="2.4.1" />
         <PackageReference Include="Hangfire" Version="1.7.20" />
         <PackageReference Include="Hangfire" Version="1.7.20" />
         <PackageReference Include="Hangfire.Autofac" Version="2.3.1" />
         <PackageReference Include="Hangfire.Autofac" Version="2.3.1" />
         <PackageReference Include="Hangfire.MemoryStorage" Version="1.7.0" />
         <PackageReference Include="Hangfire.MemoryStorage" Version="1.7.0" />

+ 4 - 2
src/Masuit.MyBlogs.Core/Startup.cs

@@ -2,6 +2,7 @@
 using Autofac.Extensions.DependencyInjection;
 using Autofac.Extensions.DependencyInjection;
 using CLRStats;
 using CLRStats;
 using CSRedis;
 using CSRedis;
+using EFCoreSecondLevelCacheInterceptor;
 using Hangfire;
 using Hangfire;
 using Hangfire.MemoryStorage;
 using Hangfire.MemoryStorage;
 using Masuit.LuceneEFCore.SearchEngine;
 using Masuit.LuceneEFCore.SearchEngine;
@@ -81,9 +82,10 @@ namespace Masuit.MyBlogs.Core
         public void ConfigureServices(IServiceCollection services)
         public void ConfigureServices(IServiceCollection services)
         {
         {
             RedisHelper.Initialization(new CSRedisClient(AppConfig.Redis));
             RedisHelper.Initialization(new CSRedisClient(AppConfig.Redis));
-            services.AddDbContextPool<DataContext>(opt =>
+            services.AddEFSecondLevelCache(options => options.UseMemoryCacheProvider(CacheExpirationMode.Sliding, TimeSpan.FromMinutes(5)).UseCacheManagerCoreProvider(CacheExpirationMode.Sliding, TimeSpan.FromMinutes(5)).DisableLogging(true));
+            services.AddDbContextPool<DataContext>((serviceProvider, opt) =>
             {
             {
-                opt.UseMySql(AppConfig.ConnString, ServerVersion.AutoDetect(AppConfig.ConnString), builder => builder.EnableRetryOnFailure(3)).EnableDetailedErrors().UseLazyLoadingProxies().UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll);
+                opt.UseMySql(AppConfig.ConnString, ServerVersion.AutoDetect(AppConfig.ConnString), builder => builder.EnableRetryOnFailure(3)).EnableDetailedErrors().UseLazyLoadingProxies().UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll).AddInterceptors(serviceProvider.GetRequiredService<SecondLevelCacheInterceptor>());
             }); //配置数据库
             }); //配置数据库
             services.ConfigureOptions();
             services.ConfigureOptions();
             services.AddHttpsRedirection(options =>
             services.AddHttpsRedirection(options =>