Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        //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);
            }
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
            }
        }
Пример #7
0
        /// <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;
            });
        }