コード例 #1
0
 public static T GetModelByGuid <T>(string guid) where T : BaseModel, new()
 {
     try
     {
         string modelTypeStr = typeof(T).Name;
         if (AppSettings.IsEnableRedis)
         {
             List <T> list = RedisReadExHelper.SetSearch <T>(modelTypeStr, 0, guid, 10000);
             return(list.Count == 0 ? Service.DBClientService.GetModelByGuid <T>(guid) : list[0]);
         }
         return(Service.DBClientService.GetModelByGuid <T>(guid));
     }
     catch (Exception ex)
     {//如果出现异常,将从数据库中查询
         LogHelper.ErrorLog(ex.ToString());
         return(Service.DBClientService.GetModelByGuid <T>(guid));
     }
 }
コード例 #2
0
ファイル: DbServiceBase.cs プロジェクト: radtek/OrmFrame
        /// <summary>
        /// 返回LIST
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="exp"></param>
        /// <returns></returns>
        public List <T> GetList <T>(Expression <Func <T, bool> > exp) where T : class, new()
        {
            string modelTypeStr = typeof(T).Name;
            var    IsExist      = IsExist <BsRedisTable>("TableName=@0", modelTypeStr);

            if (modelTypeStr.ToUpper().StartsWith("BS") || modelTypeStr.ToUpper().StartsWith("GBL") || IsExist)
            {//如果是基础数据,从本地redis中获取数据
                //构建pattern
                string pattern = "";
                pattern = GetExpPattern <T>(exp.ToString(), modelTypeStr);
                if (pattern != "")
                {//pattern如果为空,将从数据库中查询
                    List <T> list = RedisReadExHelper.SetSearch <T>(modelTypeStr, 0, pattern, 10000);
                    return(list);
                }
            }
            IQueryable <T> _dal = DataRepository().GetQueryable <T>();

            return(_dal.Where(exp).ToList());
        }
コード例 #3
0
 /// <summary>
 /// 返回整表数据
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <returns></returns>
 public static List <T> GetAllList <T>() where T : class, new()
 {
     try
     {
         string modelTypeStr = typeof(T).Name;
         if (AppSettings.IsEnableRedis)
         {
             List <T> list = RedisReadExHelper.RetrieveSet <T>(modelTypeStr);
             return(list.Count == 0 ? Service.DBClientService.GetAllList <T>() : list);
         }
         else
         {
             return(Service.DBClientService.GetAllList <T>());
         }
     }
     catch (Exception ex)
     {
         LogHelper.ErrorLog(ex.ToString());
         return(new List <T>());
     }
 }
コード例 #4
0
        /// <summary>
        ///  返回 业务表 整表数据   该方法仅仅用于业务表的取缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="where"></param>
        /// <param name="arr"></param>
        /// <returns></returns>
        public static List <T> GetOuList <T>(string where, params object[] arr) where T : class, new()
        {
            string modelTypeStr = typeof(T).Name;

            try
            {   //构建pattern
                if (AppSettings.IsEnableRedis)
                {
                    string pattern = GetPattern <T>(where, modelTypeStr, arr);
                    if (pattern != "")
                    {//pattern如果为空,将从数据库中查询
                        List <T> list = RedisReadExHelper.SetSearch <T>(modelTypeStr, 0, pattern, 10000);
                        return(list);
                    }
                }
                return(Service.DBClientService.GetList <T>(where, arr));
            }
            catch (Exception ex)
            {//如果出现异常,将从数据库中查询
                LogHelper.ErrorLog(ex.ToString());
                return(Service.DBClientService.GetList <T>(where, arr));
            }
        }
コード例 #5
0
        internal string GetExpPattern <T>(string where, string modelTypeStr) where T : class, new()
        {
            string pattern = "";

            foreach (string expType in _expTypes)
            {
                if (where.Contains(expType))
                {
                    return("");
                }
            }
            where = where.Substring(3, where.Length - 3);

            /*
             * 获取redis中的表的查询字段,eg:HospitalID,Name,CareGroupId,DocLevId,LevelId,IsActive;其中HospitalID,Name,IsActive是很多基础表都有的字段,
             * 很多表的查询是基于这三个字段进行查询,中间的那几个字段是一些外键,在二级联动、三级联动中可能会用到。
             */
            string redisSearchConditionStr = RedisReadExHelper.GetHashKeyValue(AppSettings.RedisDefaultKey, modelTypeStr);

            string[] fileArr  = new string[10];
            string[] valueArr = new string[10];
            if (redisSearchConditionStr != null)
            {                                            //在redis中有记录查询条件
                string[] redisSearchConditionKeys = redisSearchConditionStr.Split(',');
                string   keys   = "RedisConditionValus"; //pattern中的key
                string   values = "";                    //pattern中的value
                //通过正则表达式分析where语句
                Regex           rege         = new Regex(@"[A-Za-z].[A-Za-z0-9]+(\s)?=(\s)?(\S)+");
                MatchCollection Matches      = rege.Matches(where); //t.Name = "张三"  t.ClassName= "四(2)班"
                bool            isAllContain = true;                //Name,ClassName是否都包含在redisSearchConditionStr中,默认为true
                int             i            = 0;
                foreach (Match NextMatch in Matches)
                {
                    string str       = NextMatch.Groups[0].Value;
                    int    k         = str.IndexOf("=");
                    string file      = str.Substring(0, k).Trim().Substring(2); //去掉空格和t. eg:Name
                    string fileValue = str.Substring(k + 1).Trim();             //eg:\"张三\"
                    fileValue   = fileValue.Trim(new char[] { '\"' });          //eg:张三
                    valueArr[i] = fileValue;
                    fileArr[i]  = file;
                    i++;
                    if (!redisSearchConditionStr.Contains(file))
                    {
                        isAllContain = false;
                        break;
                    }
                }
                if (!isAllContain)
                {
                    if (where.Contains("IsActive") && where.Length < 14)
                    {
                        isAllContain = true;//只有IsActive一个查询条件的情况
                    }
                }
                //下面将结合where和redisSearchConditionKeys构建pattern
                GenerateExpPattern <T>(where, fileArr, valueArr, ref pattern, redisSearchConditionKeys, keys, ref values, isAllContain);
            }
            else
            {//在redis中没有记录查询条件
                if (valueArr.Length == 1)
                {
                    if (where.Contains("IsActive")) //eg:"t => t.IsActive AndAlso t.ClassName = \"四(2)班\""
                    {
                        return("");
                    }
                    //下面处理形如:"t => t.IsActive AndAlso t.ClassName = \"四(2)班\""
                    string       key          = fileArr[0];
                    PropertyInfo propertyInfo = typeof(T).GetProperty(key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                    if (propertyInfo != null)
                    {
                        if (propertyInfo.PropertyType.Name == "String")
                        {
                            pattern = "\"" + key + "\":\"" + valueArr[0].ToString() + "\"";
                        }
                        else
                        {
                            pattern = "\"" + key + "\":" + valueArr[0].ToString() + "";
                        }
                    }
                }
            }
            return(pattern);
        }