Esempio n. 1
0
        /// <summary>
        /// 提交以实体为根的一个树。
        /// </summary>
        /// <param name="tree"></param>
        /// <param name="markSaved"></param>
        private void SubmitTree(Entity tree, bool markSaved)
        {
            //先保存所有添加、变更的节点。
            //这里的 markSaved 传入的应该是 false,否则会把待删除列表中的元素清空。
            if (!tree.IsDeleted)
            {
                //如果要提交的树节点是一个根节点,而且它的索引还没有生成,则需要主动为其生成索引。
                if (tree.TreePId == null && string.IsNullOrEmpty(tree.TreeIndex))
                {
                    var maxIndex = _repository.GetMaxTreeIndex();
                    if (!string.IsNullOrEmpty(maxIndex))
                    {
                        tree.TreeIndex = _repository.TreeIndexOption.GetNextRootTreeIndex(maxIndex);
                    }
                    else
                    {
                        tree.TreeIndex = _repository.TreeIndexOption.CalculateChildIndex(null, 0);
                    }

                    //通过 TreePId 加载所有的子,并重设它们的 TreeIndex。
                    var treeChildren = tree.TreeChildren;
                    treeChildren.LoadAllNodes(LoadAllNodesMethod.ByTreePId);
                    treeChildren.ResetTreeIndex();
                }

                this.SubmitItem(tree, false, true);

                //然后再保存所有删除的节点。
                this.SubmitTreeDeletedItems(tree, markSaved);
            }
            else
            {
                if ((tree as IEntityWithId).IdProvider.IsAvailable(tree.TreePId))
                {
                    throw new NotSupportedException("删除树形子实体,请用父实体的TreeChildren.Remove()方法。");
                }

                this.DeleteTreeChildren(tree);

                this.SubmitItem(tree, false, true);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 提交以实体为根的一个树。
        /// </summary>
        /// <param name="tree"></param>
        /// <param name="markSaved"></param>
        private void SubmitTree(Entity tree, bool markSaved)
        {
            //如果要提交的树节点是一个根节点,而且它的索引还没有生成,则需要主动为其生成索引。
            if (tree.TreePId == null && string.IsNullOrEmpty(tree.TreeIndex))
            {
                var maxIndex = _repository.GetMaxTreeIndex();
                if (!string.IsNullOrEmpty(maxIndex))
                {
                    tree.TreeIndex = _repository.TreeIndexOption.GetNextRootTreeIndex(maxIndex);
                }
                else
                {
                    tree.TreeIndex = _repository.TreeIndexOption.CalculateChildIndex(null, 0);
                }

                var treeChildren = tree.TreeChildren;
                treeChildren.LoadAllNodes();
                treeChildren.ResetTreeIndex();
            }

            //先保存所有添加、变更的节点。
            //这里的 markSaved 传入的应该是 false,否则会把待删除列表中的元素清空。
            if (!tree.IsDeleted)
            {
                this.SubmitItem(tree, false, true);

                //然后再保存所有删除的节点。
                this.SubmitTreeDeletedItems(tree, markSaved);
            }
            else
            {
                this.DeleteTreeChildren(tree);

                this.SubmitItem(tree, false, true);
            }
        }