/// <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); }
/// <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); }
/// <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[] { }); }