Example #1
0
        /// <summary>数据库模型创建库表
        /// </summary>
        protected virtual Data_Table <T> OnDBModelCreating <T>(Data_Table <T> objDataModel) where T : Data_Models, IData
        {
            string pathRevise = objDataModel._isSysTable ? "/_DbSys" : "";
            string path       = this.DirBase + pathRevise + "/" + objDataModel._dtName + ".zxcdb";

            path = Path.GetFullPath(path);

            //反序列化
            Data_Table <T> Data_Table = new Data_Table <T>("");
            string         strJson    = "";

            if (File.Exists(path))
            {
                strJson    = File.ReadAllText(path);
                Data_Table = Newtonsoft.Json.JsonConvert.DeserializeObject <Data_Table <T> >(strJson);
            }

            //创建实时缓存文件夹
            if (_useCache_Realtime)
            {
                string dirDB = this.DirBase + pathRevise + "/_DbCache/" + objDataModel._dtName;
                if (!System.IO.Directory.Exists(dirDB))
                {
                    System.IO.Directory.CreateDirectory(dirDB);
                }
                Data_Table._dbPathCache = dirDB;
            }

            Data_Table._dbPath    = path;
            Data_Table._dbContext = this;
            return(Data_Table);
        }
Example #2
0
        /// <summary>初始库表对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objDataModel"></param>
        /// <returns></returns>
        public virtual bool InitDBModel <T>(Data_Table <T> objDataModel) where T : Data_Models, IData
        {
            objDataModel.SetDB(this);

            Data_Table <T> dtTemp = this.OnDBModelCreating <T>(objDataModel);

            foreach (var item in dtTemp)
            {
                item.Init();        //主动调用初始操作,避免初始不完全
                objDataModel.Add(item, false, false, true);
            }
            objDataModel._dbPath      = dtTemp._dbPath;
            objDataModel._dbPathCache = dtTemp._dbPathCache;

            //同步缓存数据
            if (_useCache_Realtime)
            {
                string[] files = objDataModel.SyncChanges(true);
                objDataModel.SaveChanges(true);

                //清理缓存数据
                objDataModel.SyncChanges_Clean(files);
            }
            return(true);
        }
Example #3
0
        /// <summary>同步数据
        /// </summary>
        /// <param name="isForce">是否强制同步</param>
        /// <returns></returns>
        public virtual string[] SyncChanges(bool isForce = false, bool asynClean = true)
        {
            //读取所有缓存文件
            string[] files   = Directory.GetFiles(_dbPathCache);
            List <T> lstTemp = new List <T>();

            foreach (var file in files)
            {
                //读取文件信息生成表对象
                Data_Table <T> Data_Table = new Data_Table <T>("");
                string         strJson    = File.ReadAllText(file);
                Data_Table = Newtonsoft.Json.JsonConvert.DeserializeObject <Data_Table <T> >(strJson);

                //记录缓存
                foreach (var rowItem in Data_Table)
                {
                    lstTemp.Add((T)rowItem.Clone());
                }
            }

            //同步成功,删除缓存文件
            if (this.SyncChanges(lstTemp))
            {
                if (asynClean)
                {
                    return(files);
                }
                this.SyncChanges_Clean(files);
            }
            return(new string[] { });
        }