void Obj_AfterQuery(object sender, QueryObject.QueryEventArgs e)
        {
            if (e.Result == null)
            {
                return;
            }

            string typefullname = e.Type.FullName;

            string key = typefullname + ".query:" + SecurityUtil.MD5_Hash(e.Sql);

            string root_key = JCache.GetRootCacheKey(typefullname);

            List <string> sub_keys = JCache.Get <List <string> >(root_key) ?? new List <string>();

            if (!sub_keys.Contains(key))
            {
                sub_keys.Add(key);
            }

            JCache.Insert(root_key, sub_keys);
            JCache.Insert(key, e.Result);
        }
 void Obj_PreQuery(object sender, QueryObject.QueryEventArgs e)
 {
     e.Result = JCache.Get(e.Type.FullName + ".query:" + SecurityUtil.MD5_Hash(e.Sql));
 }