|
@@ -1,17 +1,18 @@
|
|
|
using AutoMapper;
|
|
|
using AutoMapper.QueryableExtensions;
|
|
|
-using EFSecondLevelCache.Core;
|
|
|
using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
|
|
|
using Masuit.Tools;
|
|
|
using Masuit.Tools.Core.AspNetCore;
|
|
|
using Masuit.Tools.Models;
|
|
|
using Masuit.Tools.Systems;
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
+using Microsoft.Extensions.Caching.Memory;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Linq.Expressions;
|
|
|
using System.Threading.Tasks;
|
|
|
+using Z.EntityFramework.Plus;
|
|
|
|
|
|
namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
{
|
|
@@ -47,9 +48,12 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// 从二级缓存获取所有实体
|
|
|
/// </summary>
|
|
|
/// <returns>还未执行的SQL语句</returns>
|
|
|
- public virtual EFCachedDbSet<T> GetAllFromCache()
|
|
|
+ public virtual IEnumerable<T> GetAllFromCache()
|
|
|
{
|
|
|
- return DataContext.Set<T>().Cacheable();
|
|
|
+ return DataContext.Set<T>().FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -69,7 +73,10 @@ 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).Cacheable();
|
|
|
+ return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -105,7 +112,10 @@ 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).Cacheable();
|
|
|
+ return GetAll(orderby, isAsc).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -131,7 +141,10 @@ 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).Cacheable();
|
|
|
+ return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -164,7 +177,10 @@ 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).Cacheable();
|
|
|
+ return DataContext.Set<T>().Where(@where).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -177,7 +193,10 @@ 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).Cacheable();
|
|
|
+ return GetQuery(where, orderby, isAsc).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -234,7 +253,10 @@ 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).Cacheable();
|
|
|
+ return DataContext.Set<T>().Where(@where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -248,7 +270,10 @@ 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).Cacheable();
|
|
|
+ return GetQueryNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -268,7 +293,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>实体</returns>
|
|
|
public virtual T GetFromCache(Expression<Func<T, bool>> @where)
|
|
|
{
|
|
|
- return DataContext.Set<T>().Where(where).Cacheable().FirstOrDefault();
|
|
|
+ return DataContext.Set<T>().Where(where).DeferredFirstOrDefault().Execute();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -294,7 +319,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>实体</returns>
|
|
|
public virtual T GetFromCache<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
|
|
|
{
|
|
|
- return isAsc ? DataContext.Set<T>().OrderBy(orderby).Where(where).Cacheable().FirstOrDefault() : DataContext.Set<T>().OrderByDescending(orderby).Where(where).Cacheable().FirstOrDefault();
|
|
|
+ return isAsc ? DataContext.Set<T>().OrderBy(orderby).Where(where).DeferredFirstOrDefault().Execute() : DataContext.Set<T>().OrderByDescending(orderby).Where(where).DeferredFirstOrDefault().Execute();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -308,7 +333,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>映射实体</returns>
|
|
|
public virtual TDto GetFromCache<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).Cacheable().FirstOrDefault() : DataContext.Set<T>().Where(where).OrderByDescending(orderby).ProjectTo<TDto>(MapperConfig).Cacheable().FirstOrDefault(); ;
|
|
|
+ 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>
|
|
@@ -374,7 +399,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>实体</returns>
|
|
|
public virtual TDto GetFromCache<TDto>(Expression<Func<T, bool>> @where) where TDto : class
|
|
|
{
|
|
|
- return DataContext.Set<T>().Where(where).ProjectTo<TDto>(MapperConfig).Cacheable().FirstOrDefault();
|
|
|
+ return DataContext.Set<T>().Where(where).ProjectTo<TDto>(MapperConfig).DeferredFirstOrDefault().Execute();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -671,10 +696,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <returns>添加成功</returns>
|
|
|
public virtual IEnumerable<T> AddEntities(IList<T> list)
|
|
|
{
|
|
|
- foreach (T t in list)
|
|
|
- {
|
|
|
- yield return AddEntity(t);
|
|
|
- }
|
|
|
+ return list.Select(AddEntity);
|
|
|
}
|
|
|
|
|
|
public override void Dispose(bool disposing)
|
|
@@ -694,7 +716,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)
|
|
|
+ public static PagedList<T> ToCachedPagedList<T>(this IOrderedQueryable<T> query, int page, int size) where T : class
|
|
|
{
|
|
|
var totalCount = query.Count();
|
|
|
if (page * size > totalCount)
|
|
@@ -707,7 +729,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
page = 1;
|
|
|
}
|
|
|
|
|
|
- var list = query.Skip(size * (page - 1)).Take(size).Cacheable().ToList();
|
|
|
+ var list = query.Skip(size * (page - 1)).Take(size).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ }).ToList();
|
|
|
return new PagedList<T>(list, page, size, totalCount);
|
|
|
}
|
|
|
|
|
@@ -719,6 +744,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <param name="query"></param>
|
|
|
/// <param name="page">当前页</param>
|
|
|
/// <param name="size">页大小</param>
|
|
|
+ /// <param name="mapper"></param>
|
|
|
/// <returns></returns>
|
|
|
public static PagedList<TDto> ToPagedList<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper)
|
|
|
{
|
|
@@ -736,6 +762,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
var list = query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).ToList();
|
|
|
return new PagedList<TDto>(list, page, size, totalCount);
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 生成分页集合
|
|
|
/// </summary>
|
|
@@ -744,8 +771,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
/// <param name="query"></param>
|
|
|
/// <param name="page">当前页</param>
|
|
|
/// <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)
|
|
|
+ public static PagedList<TDto> ToCachedPagedList<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class
|
|
|
{
|
|
|
var totalCount = query.Count();
|
|
|
if (page * size > totalCount)
|
|
@@ -758,7 +786,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
|
|
|
page = 1;
|
|
|
}
|
|
|
|
|
|
- var list = query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).Cacheable().ToList();
|
|
|
+ var list = query.Skip(size * (page - 1)).Take(size).ProjectTo<TDto>(mapper).FromCache(new MemoryCacheEntryOptions()
|
|
|
+ {
|
|
|
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
|
|
|
+ }).ToList();
|
|
|
return new PagedList<TDto>(list, page, size, totalCount);
|
|
|
}
|
|
|
}
|