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

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

            if (!a)
            {
                var helper = db.dbContext.DBHelper;
                foreach (var p in query.QueryParames)
                {
                    helper.AddParam(p.Item1, p.Item2);
                }
                var sql = query.GetQuery();
                list = MemoryDataCache.CacheService.GetCacheList <T>(sql, query.GetFieldMapping(), expMinute, helper, out dataCacheKey);

                lock (lockObj)
                {
                    string key2;
                    a = TypeCache.GetModelKeyCache(type, db.DatabaseName, out key2);
                    if (!a)
                    {
                        TypeCache.SetModelKeyCache(type, db.DatabaseName, dataCacheKey);
                    }
                }
            }
            else
            {
                list = MemoryDataCache.CacheService.GetCacheItem <T>(dataCacheKey);
            }
            return(list);
        }