333
This commit is contained in:
60
FrameWork/SqlSugar/CacheScheme/CacheKeyBuider.cs
Normal file
60
FrameWork/SqlSugar/CacheScheme/CacheKeyBuider.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
internal class CacheKeyBuider
|
||||
{
|
||||
public static CacheKey GetKey(SqlSugarClient context, QueryBuilder queryBuilder)
|
||||
{
|
||||
CacheKey result = new CacheKey();
|
||||
result.Database = context.Context.Ado.Connection.Database;
|
||||
AddTables(context, queryBuilder, result);
|
||||
AddIdentificationList(queryBuilder, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void AddIdentificationList(QueryBuilder queryBuilder, CacheKey result)
|
||||
{
|
||||
result.IdentificationList = new List<string>();
|
||||
result.IdentificationList.Add(queryBuilder.GetTableNameString);
|
||||
result.IdentificationList.Add(queryBuilder.GetJoinValueString);
|
||||
result.IdentificationList.Add(queryBuilder.GetOrderByString);
|
||||
result.IdentificationList.Add(queryBuilder.GetGroupByString);
|
||||
result.IdentificationList.Add(queryBuilder.GetWhereValueString);
|
||||
result.IdentificationList.Add(queryBuilder.PartitionByValue);
|
||||
result.IdentificationList.Add(queryBuilder.Take.ObjToString());
|
||||
result.IdentificationList.Add(queryBuilder.Skip.ObjToString());
|
||||
result.IdentificationList.Add(queryBuilder.IsCount.ObjToString());
|
||||
if (queryBuilder.Parameters.HasValue())
|
||||
{
|
||||
foreach (var item in queryBuilder.Parameters)
|
||||
{
|
||||
result.IdentificationList.Add(item.ParameterName + "_" + item.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void AddTables(SqlSugarClient context, QueryBuilder queryBuilder, CacheKey result)
|
||||
{
|
||||
result.Tables = new List<string>();
|
||||
result.Tables.Add(context.EntityMaintenance.GetTableName(queryBuilder.EntityName));
|
||||
if (queryBuilder.EasyJoinInfos.HasValue())
|
||||
{
|
||||
foreach (var item in queryBuilder.EasyJoinInfos)
|
||||
{
|
||||
result.Tables.Add(context.EntityMaintenance.GetTableName(item.Value));
|
||||
}
|
||||
}
|
||||
if (queryBuilder.JoinQueryInfos.HasValue())
|
||||
{
|
||||
foreach (var item in queryBuilder.JoinQueryInfos)
|
||||
{
|
||||
result.Tables.Add(queryBuilder.Builder.GetNoTranslationColumnName(item.TableName));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
FrameWork/SqlSugar/CacheScheme/CacheSchemeMain.cs
Normal file
33
FrameWork/SqlSugar/CacheScheme/CacheSchemeMain.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
internal class CacheSchemeMain
|
||||
{
|
||||
public static T GetOrCreate<T>(ICacheService cacheService, QueryBuilder queryBuilder, Func<T> getData, int cacheDurationInSeconds, SqlSugarClient context)
|
||||
{
|
||||
CacheKey key = CacheKeyBuider.GetKey(context, queryBuilder);
|
||||
string keyString = key.ToString();
|
||||
var result = cacheService.GetOrCreate(keyString, getData, cacheDurationInSeconds);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void RemoveCache(ICacheService cacheService, string tableName)
|
||||
{
|
||||
var keys = cacheService.GetAllKey<string>();
|
||||
if (keys.HasValue())
|
||||
{
|
||||
foreach (var item in keys)
|
||||
{
|
||||
if (item.ToLower().Contains(UtilConstants.Dot + tableName.ToLower() + UtilConstants.Dot))
|
||||
{
|
||||
cacheService.Remove<string>(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user