internal long GetCount <TEntity>(Expression <Func <TEntity, bool> > filter, Func <long> func) where TEntity : class { long?result = null; //1.判断是否在二级TableCache,如果没有,则进行二级缓存初始化逻辑 if (DbContext.OpenTableCache) { result = TableCacheManager.GetEntitiesFromCache(filter)?.Count; } //2.判断是否在一级QueryCahe中 if (DbContext.OpenQueryCache) { if (result == null) { result = QueryCacheManager.GetEntitiesFromCache <long?>(); } } //3.如果都没有,则直接从逻辑中获取 if (result == null || result == default(long)) { result = func(); DbContext.IsFromCache = false; //4.Query缓存存储逻辑(内涵缓存开启校验) QueryCacheManager.CacheData(result); } return(result ?? default(long)); }
internal List <TEntity> GetEntities <TEntity>(Expression <Func <TEntity, bool> > filter, Func <List <TEntity> > func) where TEntity : class { List <TEntity> entities = null; //1.判断是否在二级TableCache,如果没有,则进行二级缓存初始化逻辑 if (DbContext.OpenTableCache) { entities = TableCacheManager.GetEntitiesFromCache(filter); } //2.判断是否在一级QueryCahe中 if (DbContext.OpenQueryCache) { if (entities == null || !entities.Any()) { entities = QueryCacheManager.GetEntitiesFromCache <List <TEntity> >(); } } //3.如果都没有,则直接从逻辑中获取 if (entities == null || !entities.Any()) { entities = func(); DbContext.IsFromCache = false; //4.Query缓存存储逻辑(内涵缓存开启校验) QueryCacheManager.CacheData(entities); } return(entities); }
/// <summary> /// 清空单个表相关的所有缓存 /// </summary> public void FlushCurrentCollectionCache(string collectionName = null) { if (DbContext.OpenQueryCache) { QueryCacheManager.FlushCollectionCache(collectionName); } if (DbContext.OpenTableCache) { TableCacheManager.FlushCollectionCache(collectionName); } }
/// 清空所有缓存 /// </summary> public void FlushAllCache() { if (DbContext.OpenQueryCache) { QueryCacheManager.FlushAllCache(); } if (DbContext.OpenTableCache) { TableCacheManager.FlushAllCache(); } }
internal void Update <TEntity>(TEntity entity, Expression <Func <TEntity, bool> > filter) { //1.清空Query缓存中关于该表的所有缓存记录 if (DbContext.OpenQueryCache) { QueryCacheManager.FlushCollectionCache(); } //2.更新Table缓存中的该表记录 if (DbContext.OpenTableCache) { TableCacheManager.UpdateCache(entity, filter); } }
internal void Add <TEntity>(IEnumerable <TEntity> entities) { //1.清空Query缓存中关于该表的所有缓存记录 if (DbContext.OpenQueryCache) { QueryCacheManager.FlushCollectionCache(); } //2.更新Table缓存中的该表记录 if (DbContext.OpenTableCache) { TableCacheManager.AddCache(entities); } }
internal void Delete <TEntity>(TEntity entity) { //1.清空Query缓存中关于该表的所有缓存记录 if (DbContext.OpenQueryCache) { QueryCacheManager.FlushCollectionCache(); } //2.更新Table缓存中的该表记录 if (DbContext.OpenTableCache) { TableCacheManager.DeleteCache(entity); } }
internal T GetObject <T>(Func <T> func) where T : class { T result = null; //1.判断是否在一级QueryCahe中 if (DbContext.OpenTableCache) { result = QueryCacheManager.GetEntitiesFromCache <T>(); } //2.如果都没有,则直接从逻辑中获取 if (result == null) { result = func(); DbContext.IsFromCache = false; //3.Query缓存存储逻辑(内涵缓存开启校验) QueryCacheManager.CacheData(result); } return(result); }
internal DbCacheManager(DbContext context) : base(context) { QueryCacheManager = new QueryCacheManager(context); TableCacheManager = new TableCacheManager(context); }