/// <summary> /// 先进先出优先队列缓存(非计数缓存) /// </summary> /// <param name="valueMember">节点成员</param> /// <param name="previousMember">前一个节点成员</param> /// <param name="nextMember">后一个节点成员</param> /// <param name="maxCount">缓存默认最大容器大小</param> protected memberQueue(Expression <Func <memberCacheType, cacheValueType> > valueMember, Expression <Func <memberCacheType, memberCacheType> > previousMember , Expression <Func <memberCacheType, memberCacheType> > nextMember, int maxCount) { if (valueMember == null || previousMember == null || nextMember == null) { log.Error.Throw(log.exceptionType.Null); } memberExpression <memberCacheType, cacheValueType> valueExpression = new memberExpression <memberCacheType, cacheValueType>(valueMember); if (valueExpression.Field == null) { log.Error.Throw(log.exceptionType.ErrorOperation); } memberExpression <memberCacheType, memberCacheType> previousExpression = new memberExpression <memberCacheType, memberCacheType>(previousMember); if (previousExpression.Field == null) { log.Error.Throw(log.exceptionType.ErrorOperation); } memberExpression <memberCacheType, memberCacheType> nextExpression = new memberExpression <memberCacheType, memberCacheType>(nextMember); if (nextExpression.Field == null) { log.Error.Throw(log.exceptionType.ErrorOperation); } getMemberValue = valueExpression.GetMember; setMemberValue = valueExpression.SetMember; getPrevious = previousExpression.GetMember; setPrevious = previousExpression.SetMember; getNext = nextExpression.GetMember; setNext = nextExpression.SetMember; this.maxCount = maxCount <= 0 ? config.sql.Default.CacheMaxCount : maxCount; }
/// <summary> /// 关键字整表缓存 /// </summary> /// <param name="sqlTool">SQL操作工具</param> /// <param name="getKey">键值获取器</param> /// <param name="getValue">根据关键字获取数据</param> /// <param name="member">缓存字段表达式</param> /// <param name="group">数据分组</param> public memberKey(cache<valueType, modelType> cache, Func<modelType, keyType> getKey , Func<keyType, valueType> getValue, Expression<Func<valueType, valueType>> member, int group = 1) : base(cache.SqlTool, null, getKey, group) { if (getValue == null || member == null) log.Error.Throw(log.exceptionType.Null); memberExpression<valueType, valueType> expression = new memberExpression<valueType, valueType>(member); if (expression.Field == null) log.Error.Throw(log.exceptionType.ErrorOperation); this.cache = cache; this.getValue = getValue; getMember = expression.GetMember; setMember = expression.SetMember; cache.SqlTool.OnInsertedLock += onInserted; cache.SqlTool.OnUpdatedLock += onUpdated; cache.SqlTool.OnDeletedLock += onDeleted; resetLock(); }
/// <summary> /// 分组列表缓存 /// </summary> /// <param name="cache">整表缓存</param> /// <param name="getKey">分组字典关键字获取器</param> /// <param name="getValue">获取目标对象委托</param> /// <param name="member">缓存字段表达式</param> /// <param name="getTargets">获取缓存目标对象集合</param> public member(events.cache <valueType, modelType> cache, Func <modelType, keyType> getKey, Func <keyType, targetType> getValue , Expression <Func <targetType, cacheType> > member, Func <IEnumerable <targetType> > getTargets) { if (cache == null) { log.Error.Throw("cache is null", null, false); } if (getKey == null || getValue == null || getTargets == null || member == null) { log.Error.Throw(log.exceptionType.Null); } memberExpression <targetType, cacheType> expression = new memberExpression <targetType, cacheType>(member); if (expression.Field == null) { log.Error.Throw(log.exceptionType.ErrorOperation); } this.cache = cache; this.getKey = getKey; this.getValue = getValue; this.getTargets = getTargets; GetMember = expression.GetMember; setMember = expression.SetMember; }
///// <summary> ///// 缓存计数 ///// </summary> ///// <param name="sqlTool">SQL操作工具</param> ///// <param name="getKey">缓存关键字获取器</param> ///// <param name="group">数据分组</param> //protected memberCounterBase(fastCSharp.emit.sqlTable.sqlTool<valueType, modelType> sqlTool, int group, Expression<Func<modelType, keyType>> getKey // , Func<keyType, targetType> getValue, Expression<Func<targetType, keyValue<valueType, int>>> member) // : this(sqlTool, group, getKey == null ? null : getKey.Compile(), getValue, member) //{ // sqlTool.SetSelectMember(getKey); //} /// <summary> /// 缓存计数 /// </summary> /// <param name="sqlTool">SQL操作工具</param> /// <param name="getKey">缓存关键字获取器</param> /// <param name="group">数据分组</param> protected memberCounter(whole.events.cache <valueType, modelType, memberCacheType> cache, int group, Func <modelType, keyType> getKey , Func <keyType, targetType> getByKey, Func <valueType, targetType> getValue, Expression <Func <targetType, keyValue <valueType, int> > > member) : base(cache.SqlTool, group) { if (getKey == null || getByKey == null || getValue == null || member == null) { log.Error.Throw(log.exceptionType.Null); } memberExpression <targetType, keyValue <valueType, int> > expression = new memberExpression <targetType, keyValue <valueType, int> >(member); if (expression.Field == null) { log.Error.Throw(log.exceptionType.ErrorOperation); } GetKey = getKey; GetByKey = getByKey; this.GetValue = getValue; GetMember = expression.GetMember; setMember = expression.SetMember; cache.SqlTool.OnUpdatedLock += onUpdated; //cache.OnUpdated += onUpdated; cache.OnDeleted += onDeleted; }