Beispiel #1
0
        /// <summary>
        /// 按类型获取缓存,只能在继承类实现,只能同时有一个类型
        /// 不建议直接调用,请调用AllCache或重写调用
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        protected Dictionary <string, TModel> GetCache(LambdaQuery <TModel> query)
        {
            Type type      = typeof(TModel);
            int  expMinute = query.__ExpireMinute;

            if (expMinute == 0)
            {
                expMinute = 5;
            }
            query.__ExpireMinute = expMinute;
            string dataCacheKey;
            var    list = new Dictionary <string, TModel>();
            var    a    = TypeCache.GetModelKeyCache(type, DBExtend.DatabaseName, out dataCacheKey);

            if (!a)
            {
                var db    = DBExtend;
                var list2 = db.QueryOrFromCache <TModel>(query, out dataCacheKey);
                list = ObjectConvert.ConvertToDictionary <TModel>(list2);
                lock (lockObj)
                {
                    string key2;
                    a = TypeCache.GetModelKeyCache(type, DBExtend.DatabaseName, out key2);
                    if (!a)
                    {
                        TypeCache.SetModelKeyCache(type, DBExtend.DatabaseName, dataCacheKey);
                    }
                }
            }
            else
            {
                list = MemoryDataCache.CacheService.GetCacheItem <TModel>(dataCacheKey);
            }
            return(list);
        }
Beispiel #2
0
        /// <summary>
        /// 按类型获取缓存,只能在继承类实现,只能同时有一个类型
        /// 不建议直接调用,请调用AllCache或重写调用
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        protected Dictionary <int, TModel> GetCache(LambdaQuery <TModel> query)
        {
            Type type      = typeof(TModel);
            int  expMinute = query.__ExpireMinute;

            if (expMinute == 0)
            {
                expMinute = 5;
            }
            query.__ExpireMinute = expMinute;
            string dataCacheKey;
            var    list = new Dictionary <int, TModel>();

            if (!TypeCache.ModelKeyCache.ContainsKey(type))
            {
                var helper = GetDbHelper();//避开事务控制,使用新的连接
                var list2  = helper.QueryList <TModel>(query, out dataCacheKey);
                list = ObjectConvert.ConvertToDictionary <TModel>(list2);
                lock (lockObj)
                {
                    if (!TypeCache.ModelKeyCache.ContainsKey(type))
                    {
                        TypeCache.ModelKeyCache.Add(type, dataCacheKey);
                    }
                }
            }
            else
            {
                dataCacheKey = TypeCache.ModelKeyCache[type];
                list         = MemoryDataCache.CacheService.GetCacheItem <TModel>(dataCacheKey);
            }
            return(list);
        }
Beispiel #3
0
        /// <summary>
        /// 按类型获取缓存,只能在继承类实现,只能同时有一个类型
        /// 不建议直接调用,请调用AllCache或重写调用
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        protected Dictionary <string, TModel> GetCache(LambdaQuery <TModel> query)
        {
            Type type      = typeof(TModel);
            int  expMinute = query.__ExpireMinute;

            if (expMinute == 0)
            {
                expMinute = 5;
            }
            query.__ExpireMinute = expMinute;
            string dataCacheKey;
            var    list = new Dictionary <string, TModel>();

            if (!TypeCache.ModelKeyCache.ContainsKey(type))
            {
                var db    = DBExtend;
                var list2 = db.QueryOrFromCache <TModel>(query, out dataCacheKey);
                list = ObjectConvert.ConvertToDictionary <TModel>(list2);
                lock (lockObj)
                {
                    if (!TypeCache.ModelKeyCache.ContainsKey(type))
                    {
                        TypeCache.ModelKeyCache.TryAdd(type, dataCacheKey);
                    }
                }
            }
            else
            {
                dataCacheKey = TypeCache.ModelKeyCache[type];
                list         = MemoryDataCache.CacheService.GetCacheItem <TModel>(dataCacheKey);
            }
            return(list);
        }