/// <summary> /// 获取数据实体 /// 如果数据实体不存在,返回null /// </summary> /// <param name="id"></param> /// <returns></returns> public DataEntityDev GetDataEntity(string id) { //首先尝试从缓存中获取 XElement cachingElement = (XElement)_cachingService.GetData(id); string strEntity; if (cachingElement == null) { string file = Path.Combine(Constant.PACKAGE_DATAENTITY_FOLDER, id); bool fileExist = _packageService.Current.Container(file); Debug.Assert(fileExist, "数据实体文件不存在"); if (fileExist == false) { return(null); } strEntity = _packageService.Current.GetFileContent(file); XElement entityElement = XElement.Parse(strEntity); _cachingService.Add(id, entityElement); } else { strEntity = cachingElement.ToString(); } DataEntityDev dataEntity = new DataEntityDev(false); dataEntity.FromXml(strEntity); return(dataEntity); }
/// <summary> /// 更新数据实体 /// 实现方式是删除旧节点后重新添加,避免在这里再次操作XML具体内容 /// </summary> /// <param name="dataEntity"></param> public void Update(DataEntityDev dataEntity) { Debug.Assert(dataEntity != null, "dataEntity 为 null"); if (dataEntity == null) { return; } //更新索引信息 XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectDataEntity, dataEntity.Id)); Debug.Assert(element != null, "更新数据实体索引时未找到指定数据实体的索引记录"); if (element != null) { element.ReplaceWith(ArchiveHelper.GetEntityArchiveIndex(dataEntity)); SaveIndexFile(); string xml = dataEntity.ToXml(); XElement xElement = XElement.Parse(xml); //更新数据实体文件 _packageService.Current.AddFileContent(xml, Path.Combine(Constant.PACKAGE_DATAENTITY_FOLDER, dataEntity.Id)); _cachingService.Add(dataEntity.Id, xElement); //发布事件 DataEntityEventArgs args = new DataEntityEventArgs(dataEntity); _eventAggregator.GetEvent <DataEntityUpdatedEvent>().Publish(args); } }
//TODO:更名为remove /// <summary> /// 删除数据实体 /// </summary> /// <param name="id"></param> public void Delete(DataEntityDev dataEntity) { Debug.Assert(dataEntity != null, "dataEntity 为 null"); if (dataEntity == null) { return; } //移除索引信息 XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectDataEntity, dataEntity.Id)); Debug.Assert(element != null, "删除数据实体索引时未找到指定数据实体的索引记录"); if (element != null) { element.Remove(); SaveIndexFile(); //移除数据实体文件 _packageService.Current.DeleteFile(Path.Combine(Constant.PACKAGE_DATAENTITY_FOLDER, dataEntity.Id)); _cachingService.Remove(dataEntity.Id); //发布事件 DataEntityEventArgs args = new DataEntityEventArgs(dataEntity); _eventAggregator.GetEvent <DataEntityRemovedEvent>().Publish(args); } }
/// <summary> /// 添加一个数据实体 /// </summary> /// <param name="dataEntity"></param> public void Add(DataEntityDev dataEntity) { Debug.Assert(dataEntity != null, "dataEntity 为 null"); if (dataEntity == null) { return; } //添加索引信息 _indexXml.XPathSelectElement(XPATH_Index_DataEntity).Add(ArchiveHelper.GetEntityArchiveIndex(dataEntity)); SaveIndexFile(); string xml = dataEntity.ToXml(); XElement xElement = XElement.Parse(xml); //添加数据实体文件 _packageService.Current.AddFileContent(xml, Path.Combine(Constant.PACKAGE_DATAENTITY_FOLDER, dataEntity.Id)); _cachingService.Add(dataEntity.Id, xElement); //发布事件 DataEntityEventArgs args = new DataEntityEventArgs(dataEntity); _eventAggregator.GetEvent <DataEntityAddedEvent>().Publish(args); }
/// <summary> /// 获取数据实体列表 /// </summary> /// <returns></returns> public List <DataEntity> GetDataEntityList() { XElement[] entityElements = _indexXml.XPathSelectElements(XPATH_Index_DataEntity_Entity).ToArray(); List <DataEntity> list = new List <DataEntity>(); foreach (XElement element in entityElements) { DataEntityDev entity = GetDataEntity(element.Attribute("Id").Value); if (entity != null) { list.Add(entity); } } return(list); }
/// <summary> /// 提交 /// 根据dataEntity的Id进行判断,如果已存在,调用update,如果不存在,调用add /// </summary> /// <param name="dataEntity"></param> public void Commit(DataEntityDev dataEntity) { Debug.Assert(dataEntity != null, "dataEntity 为 null"); if (dataEntity == null) { return; } if (EntityExistById(dataEntity.Id)) { Update(dataEntity); } else { Add(dataEntity); } }
/// <summary> /// 事件订阅 /// </summary> private void SubscribeEvent() { _eventAggregator.GetEvent <ProjectOpenedEvent>().Subscribe((e) => { #region 初始化 IndexXml //初始化 IndexXml if (_packageService.Current.Container(Constant.PACKAGE_DATAENTITY_INDEX_FILE)) { //读取当前数据实体索引信息 string strIndex = _packageService.Current.GetFileContent(Constant.PACKAGE_DATAENTITY_INDEX_FILE); _indexXml = XElement.Parse(strIndex); } else { //如果当前不存在索引文件,创建一个 _indexXml = new XElement("Index", new XElement("DataEntity")); SaveIndexFile(); } #endregion #region 首次打开的话创建预置数据实体 if (e.Project.ProjectSummary.FirstRun) { #region 创建枚举数据表 IDataBase dataBase = DataBaseProvide.Current; //创建枚举表 DataEntityDev enumDataEntity = new DataEntityDev(Language.Current.DataEntity_Enum, "Enum", true); enumDataEntity.Items.Add( new DataItemEntityDev(enumDataEntity, Language.Current.DataEntity_Enum_Text, "Text", true, false, dataBase.CreateVarCharField(50)), new DataItemEntityDev(enumDataEntity, Language.Current.DataEntity_Enum_Value, "Value", true, false, dataBase.CreateVarCharField(50)), new DataItemEntityDev(enumDataEntity, Language.Current.DataEntity_Enum_EnumKey, "EnumKey", true, false, dataBase.CreateVarCharField(50)), new DataItemEntityDev(enumDataEntity, Language.Current.DataEntity_Enum_Sort, "Sort", true, false, dataBase.CreateIntField()) ); Add(enumDataEntity); #endregion #region 创建用户数据表 //创建用户表 DataEntityDev userDataEntity = new DataEntityDev(Language.Current.DataEntity_User, "User", true); //GroupId暂时允许为null userDataEntity.Items.Add( new DataItemEntityDev(userDataEntity, Language.Current.DataEntity_User_GroupId, "GroupId", true, true, dataBase.CreateIdField()), new DataItemEntityDev(userDataEntity, Language.Current.DataEntity_User_Name, "Name", true, false, dataBase.CreateVarCharField(50)), new DataItemEntityDev(userDataEntity, Language.Current.DataEntity_User_LoginName, "LoginName", true, false, dataBase.CreateVarCharField(50)), new DataItemEntityDev(userDataEntity, Language.Current.DataEntity_User_Password, "Password", true, false, dataBase.CreateVarCharField(50)), new DataItemEntityDev(userDataEntity, Language.Current.DataEntity_User_LastLoginTime, "LastLoginTime", true, true, dataBase.CreateSmallDatetimeField()) ); Add(userDataEntity); #endregion #region 创建用户组表 //创建用户组表 DataEntityDev userGroupDataEntity = new DataEntityDev(Language.Current.DataEntity_UserGroup, "UserGroup", true); userGroupDataEntity.Items.Add( new DataItemEntityDev(userGroupDataEntity, Language.Current.DataEntity_UserGroup_Name, "Name", true, false, dataBase.CreateVarCharField(50)) ); Add(userGroupDataEntity); #endregion } #endregion }); _eventAggregator.GetEvent <ProjectClosedEvent>().Subscribe((e) => { //释放 IndexXml _indexXml = null; }); }