예제 #1
0
        /// <summary>
        /// 同步主键
        /// 当主键表中所存的的值小于对应表中实际最大主键值时
        /// 修改主键表中的值为该最大值
        /// </summary>
        /// <returns></returns>
        public JsonResult SyncPK()
        {
            InvokeResult       result   = new InvokeResult();
            List <StorageData> dataList = new List <StorageData>();
            var pkCounter    = dataOp.FindAll("TablePKCounter").ToList();
            var allRules     = TableRule.GetAllTables();
            var allTempRules = allRules.Select(i => new
            {
                tbName = i.Name,
                key    = i.GetPrimaryKey()
            }).ToList();

            foreach (var counter in pkCounter)
            {
                var    tbName  = counter.Text("tbName");
                var    curMax  = counter.Int("count");//当前主键表所存主键值
                int    factMax = 0;
                var    rule    = allTempRules.Where(i => i.tbName == tbName).FirstOrDefault();
                string key     = string.Empty;
                if (rule != null)
                {
                    key = rule.key ?? string.Empty;
                }
                string current = string.Empty;

                if (!string.IsNullOrWhiteSpace(key))
                {
                    var allDatas = dataOp.FindAll(tbName).SetFields(key).ToList();
                    if (allDatas.Count > 0)
                    {
                        factMax = allDatas.Max(i => i.Int(key));
                        if (curMax < factMax)
                        {
                            StorageData data = new StorageData();
                            data.Name     = "TablePKCounter";
                            data.Query    = Query.And(Query.EQ("tbName", tbName), Query.EQ("count", curMax.ToString()));
                            data.Type     = StorageType.Update;
                            data.Document = new BsonDocument().Add("count", factMax.ToString());
                            dataList.Add(data);
                        }
                    }
                }
            }
            result = dataOp.BatchSaveStorageData(dataList);
            return(Json(TypeConvert.InvokeResultToPageJson(result)));
        }