|
|
@@ -25,6 +25,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
public virtual DataContext DataContext { get; set; }
|
|
|
|
|
|
public MapperConfiguration MapperConfig { get; set; }
|
|
|
+ public static MemoryCacheEntryOptions CacheOtions => new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
+ };
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取所有实体
|
|
|
@@ -50,10 +54,16 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>还未执行的SQL语句</returns>
|
|
|
public virtual IEnumerable<T> GetAllFromCache()
|
|
|
{
|
|
|
- return DataContext.Set<T>().FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return DataContext.Set<T>().FromCache(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 从二级缓存获取所有实体
|
|
|
+ /// </summary>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<IEnumerable<T>> GetAllFromCacheAsync()
|
|
|
+ {
|
|
|
+ return DataContext.Set<T>().FromCacheAsync(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -73,10 +83,17 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>还未执行的SQL语句</returns>
|
|
|
public virtual IEnumerable<TDto> GetAllFromCache<TDto>() where TDto : class
|
|
|
{
|
|
|
- return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取所有实体
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TDto">映射实体</typeparam>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class
|
|
|
+ {
|
|
|
+ return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -112,10 +129,19 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>还未执行的SQL语句</returns>
|
|
|
public virtual IEnumerable<T> GetAllFromCache<TS>(Expression<Func<T, TS>> orderby, bool isAsc = true)
|
|
|
{
|
|
|
- return GetAll(orderby, isAsc).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return GetAll(orderby, isAsc).FromCache(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取所有实体
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS">排序</typeparam>
|
|
|
+ /// <param name="orderby">排序字段</param>
|
|
|
+ /// <param name="isAsc">是否升序</param>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<IEnumerable<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
|
|
|
+ {
|
|
|
+ return GetAll(orderby, isAsc).FromCacheAsync(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -141,10 +167,20 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>还未执行的SQL语句</returns>
|
|
|
public virtual IEnumerable<TDto> GetAllFromCache<TS, TDto>(Expression<Func<T, TS>> orderby, bool isAsc = true) where TDto : class
|
|
|
{
|
|
|
- return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取所有实体
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS">排序</typeparam>
|
|
|
+ /// <typeparam name="TDto">映射实体</typeparam>
|
|
|
+ /// <param name="orderby">排序字段</param>
|
|
|
+ /// <param name="isAsc">是否升序</param>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
|
|
|
+ {
|
|
|
+ return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -177,10 +213,17 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>还未执行的SQL语句</returns>
|
|
|
public virtual IEnumerable<T> GetQueryFromCache(Expression<Func<T, bool>> where)
|
|
|
{
|
|
|
- return DataContext.Set<T>().Where(where).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return DataContext.Set<T>().Where(where).FromCache(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 基本查询方法,获取一个集合,优先从二级缓存读取
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<IEnumerable<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where)
|
|
|
+ {
|
|
|
+ return DataContext.Set<T>().Where(where).FromCacheAsync(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -193,10 +236,34 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>还未执行的SQL语句</returns>
|
|
|
public virtual IEnumerable<T> GetQueryFromCache<TS>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
|
|
|
{
|
|
|
- return GetQuery(where, orderby, isAsc).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return GetQuery(where, orderby, isAsc).FromCache(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 基本查询方法,获取一个集合,优先从二级缓存读取
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS">排序字段</typeparam>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <param name="orderby">排序方式</param>
|
|
|
+ /// <param name="isAsc">是否升序</param>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<IEnumerable<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
|
|
|
+ {
|
|
|
+ return GetQuery(where, orderby, isAsc).FromCacheAsync(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS">排序字段</typeparam>
|
|
|
+ /// <typeparam name="TDto">输出类型</typeparam>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <param name="orderby">排序方式</param>
|
|
|
+ /// <param name="isAsc">是否升序</param>
|
|
|
+ /// <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
|
|
|
+ {
|
|
|
+ return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -253,10 +320,17 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>实体集合</returns>
|
|
|
public virtual IEnumerable<TDto> GetQueryFromCache<TDto>(Expression<Func<T, bool>> where) where TDto : class
|
|
|
{
|
|
|
- return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(CacheOtions);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
|
|
|
+ {
|
|
|
+ return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCacheAsync(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -270,10 +344,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <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
|
|
|
{
|
|
|
- return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- });
|
|
|
+ return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(CacheOtions);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -296,6 +367,16 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
return DataContext.Set<T>().Where(where).DeferredFirstOrDefault().Execute();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 获取第一条数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <returns>实体</returns>
|
|
|
+ public Task<T> GetFromCacheAsync(Expression<Func<T, bool>> @where)
|
|
|
+ {
|
|
|
+ return DataContext.Set<T>().Where(where).DeferredFirstOrDefault().ExecuteAsync();
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取第一条数据
|
|
|
/// </summary>
|
|
|
@@ -322,6 +403,33 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
return isAsc ? DataContext.Set<T>().OrderBy(orderby).Where(where).DeferredFirstOrDefault().Execute() : DataContext.Set<T>().OrderByDescending(orderby).Where(where).DeferredFirstOrDefault().Execute();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 获取第一条数据
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS">排序</typeparam>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <param name="orderby">排序字段</param>
|
|
|
+ /// <param name="isAsc">是否升序</param>
|
|
|
+ /// <returns>实体</returns>
|
|
|
+ public Task<T> GetFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
|
|
|
+ {
|
|
|
+ return isAsc ? DataContext.Set<T>().OrderBy(orderby).Where(where).DeferredFirstOrDefault().ExecuteAsync() : DataContext.Set<T>().OrderByDescending(orderby).Where(where).DeferredFirstOrDefault().ExecuteAsync();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取第一条被AutoMapper映射后的数据
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS">排序</typeparam>
|
|
|
+ /// <typeparam name="TDto">映射实体</typeparam>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <param name="orderby">排序字段</param>
|
|
|
+ /// <param name="isAsc">是否升序</param>
|
|
|
+ /// <returns>映射实体</returns>
|
|
|
+ public Task<TDto> GetAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
|
|
|
+ {
|
|
|
+ return isAsc ? DataContext.Set<T>().Where(where).OrderBy(orderby).AsNoTracking().ProjectTo<TDto>(MapperConfig).FirstOrDefaultAsync() : DataContext.Set<T>().Where(where).OrderByDescending(orderby).AsNoTracking().ProjectTo<TDto>(MapperConfig).FirstOrDefaultAsync();
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取第一条被AutoMapper映射后的数据
|
|
|
/// </summary>
|
|
|
@@ -336,14 +444,28 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
return isAsc ? DataContext.Set<T>().Where(where).OrderBy(orderby).ProjectTo<TDto>(MapperConfig).DeferredFirstOrDefault().Execute() : DataContext.Set<T>().Where(where).OrderByDescending(orderby).ProjectTo<TDto>(MapperConfig).DeferredFirstOrDefault().Execute();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 获取第一条被AutoMapper映射后的数据
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS">排序</typeparam>
|
|
|
+ /// <typeparam name="TDto">映射实体</typeparam>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <param name="orderby">排序字段</param>
|
|
|
+ /// <param name="isAsc">是否升序</param>
|
|
|
+ /// <returns>映射实体</returns>
|
|
|
+ public Task<TDto> GetFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
|
|
|
+ {
|
|
|
+ return isAsc ? DataContext.Set<T>().Where(where).OrderBy(orderby).ProjectTo<TDto>(MapperConfig).DeferredFirstOrDefault().ExecuteAsync() : DataContext.Set<T>().Where(where).OrderByDescending(orderby).ProjectTo<TDto>(MapperConfig).DeferredFirstOrDefault().ExecuteAsync();
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取第一条数据
|
|
|
/// </summary>
|
|
|
/// <param name="where">查询条件</param>
|
|
|
/// <returns>实体</returns>
|
|
|
- public virtual async Task<T> GetAsync(Expression<Func<T, bool>> where)
|
|
|
+ public virtual Task<T> GetAsync(Expression<Func<T, bool>> where)
|
|
|
{
|
|
|
- return await DataContext.Set<T>().FirstOrDefaultAsync(where).ConfigureAwait(true);
|
|
|
+ return DataContext.Set<T>().FirstOrDefaultAsync(@where);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -402,6 +524,16 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
return DataContext.Set<T>().Where(where).ProjectTo<TDto>(MapperConfig).DeferredFirstOrDefault().Execute();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 获取第一条被AutoMapper映射后的数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="where">查询条件</param>
|
|
|
+ /// <returns>实体</returns>
|
|
|
+ public Task<TDto> GetFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
|
|
|
+ {
|
|
|
+ return DataContext.Set<T>().Where(where).ProjectTo<TDto>(MapperConfig).DeferredFirstOrDefault().ExecuteAsync();
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取第一条被AutoMapper映射后的数据(不跟踪实体)
|
|
|
/// </summary>
|
|
|
@@ -421,9 +553,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// </summary>
|
|
|
/// <param name="where">查询条件</param>
|
|
|
/// <returns>实体</returns>
|
|
|
- public virtual async Task<T> GetNoTrackingAsync(Expression<Func<T, bool>> where)
|
|
|
+ public virtual Task<T> GetNoTrackingAsync(Expression<Func<T, bool>> where)
|
|
|
{
|
|
|
- return await DataContext.Set<T>().AsNoTracking().FirstOrDefaultAsync(where).ConfigureAwait(true);
|
|
|
+ return DataContext.Set<T>().AsNoTracking().FirstOrDefaultAsync(@where);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -491,6 +623,39 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
return isAsc ? temp.OrderBy(orderby).ToCachedPagedList(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToCachedPagedList(pageIndex, pageSize);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 高效分页查询方法,优先从二级缓存读取
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS"></typeparam>
|
|
|
+ /// <param name="pageIndex">第几页</param>
|
|
|
+ /// <param name="pageSize">每页大小</param>
|
|
|
+ /// <param name="where">where Lambda条件表达式</param>
|
|
|
+ /// <param name="orderby">orderby Lambda条件表达式</param>
|
|
|
+ /// <param name="isAsc">升序降序</param>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<PagedList<T>> GetPagesFromCacheAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
|
|
|
+ {
|
|
|
+ var temp = DataContext.Set<T>().Where(where);
|
|
|
+ return isAsc ? temp.OrderBy(orderby).ToCachedPagedListAsync(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToCachedPagedListAsync(pageIndex, pageSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 高效分页查询方法,优先从二级缓存读取,取出被AutoMapper映射后的数据集合
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="TS"></typeparam>
|
|
|
+ /// <typeparam name="TDto"></typeparam>
|
|
|
+ /// <param name="pageIndex">第几页</param>
|
|
|
+ /// <param name="pageSize">每页大小</param>
|
|
|
+ /// <param name="where">where Lambda条件表达式</param>
|
|
|
+ /// <param name="orderby">orderby Lambda条件表达式</param>
|
|
|
+ /// <param name="isAsc">升序降序</param>
|
|
|
+ /// <returns>还未执行的SQL语句</returns>
|
|
|
+ public Task<PagedList<TDto>> GetPagesFromCacheAsync<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc) where TDto : class
|
|
|
+ {
|
|
|
+ var temp = DataContext.Set<T>().Where(where).AsNoTracking();
|
|
|
+ return isAsc ? temp.OrderBy(orderby).ToCachedPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig) : temp.OrderByDescending(orderby).ToCachedPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 高效分页查询方法(不跟踪实体)
|
|
|
/// </summary>
|
|
|
@@ -716,7 +881,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <param name="page">当前页</param>
|
|
|
/// <param name="size">页大小</param>
|
|
|
/// <returns></returns>
|
|
|
- public static PagedList<T> ToCachedPagedList<T>(this IOrderedQueryable<T> query, int page, int size) where T : class
|
|
|
+ public static PagedList<T> ToCachedPagedList<T>(this IOrderedQueryable<T> query, int page, int size) where T : class, new()
|
|
|
{
|
|
|
var totalCount = query.Count();
|
|
|
if (page * size > totalCount)
|
|
|
@@ -729,13 +894,35 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
page = 1;
|
|
|
}
|
|
|
|
|
|
- var list = query.Skip(size * (page - 1)).Take(size).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- }).ToList();
|
|
|
+ var list = query.Skip(size * (page - 1)).Take(size).FromCache(BaseRepository<T>.CacheOtions).ToList();
|
|
|
return new PagedList<T>(list, page, size, totalCount);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 生成分页集合
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="T"></typeparam>
|
|
|
+ /// <param name="query"></param>
|
|
|
+ /// <param name="page">当前页</param>
|
|
|
+ /// <param name="size">页大小</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static async Task<PagedList<T>> ToCachedPagedListAsync<T>(this IOrderedQueryable<T> query, int page, int size) where T : class, new()
|
|
|
+ {
|
|
|
+ var totalCount = query.Count();
|
|
|
+ if (page * size > totalCount)
|
|
|
+ {
|
|
|
+ page = (int)Math.Ceiling(totalCount / (size * 1.0));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (page <= 0)
|
|
|
+ {
|
|
|
+ page = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ var list = await query.Skip(size * (page - 1)).Take(size).FromCacheAsync(BaseRepository<T>.CacheOtions);
|
|
|
+ return new PagedList<T>(list.ToList(), page, size, totalCount);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 生成分页集合
|
|
|
/// </summary>
|
|
|
@@ -773,7 +960,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <param name="size">页大小</param>
|
|
|
/// <param name="mapper"></param>
|
|
|
/// <returns></returns>
|
|
|
- public static PagedList<TDto> ToCachedPagedList<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class
|
|
|
+ public static PagedList<TDto> ToCachedPagedList<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class where T : class, new()
|
|
|
{
|
|
|
var totalCount = query.Count();
|
|
|
if (page * size > totalCount)
|
|
|
@@ -786,11 +973,35 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
page = 1;
|
|
|
}
|
|
|
|
|
|
- var list = query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).FromCache(new MemoryCacheEntryOptions()
|
|
|
- {
|
|
|
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
|
|
|
- }).ToList();
|
|
|
+ var list = query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).FromCache(BaseRepository<T>.CacheOtions).ToList();
|
|
|
return new PagedList<TDto>(list, page, size, totalCount);
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 生成分页集合
|
|
|
+ /// </summary>
|
|
|
+ /// <typeparam name="T"></typeparam>
|
|
|
+ /// <typeparam name="TDto"></typeparam>
|
|
|
+ /// <param name="query"></param>
|
|
|
+ /// <param name="page">当前页</param>
|
|
|
+ /// <param name="size">页大小</param>
|
|
|
+ /// <param name="mapper"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static async Task<PagedList<TDto>> ToCachedPagedListAsync<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class where T : class, new()
|
|
|
+ {
|
|
|
+ var totalCount = query.Count();
|
|
|
+ if (page * size > totalCount)
|
|
|
+ {
|
|
|
+ page = (int)Math.Ceiling(totalCount / (size * 1.0));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (page <= 0)
|
|
|
+ {
|
|
|
+ page = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ var list = await query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).FromCacheAsync(BaseRepository<T>.CacheOtions);
|
|
|
+ return new PagedList<TDto>(list.ToList(), page, size, totalCount);
|
|
|
+ }
|
|
|
}
|
|
|
}
|