public void SetUserDefaultOrganizationTest() { SCUser user = SCObjectGenerator.PrepareUserObject(); SCObjectOperations.Instance.AddUser(user, null); SCUser userLoaded = (SCUser)SchemaObjectAdapter.Instance.Load(user.ID); SCOrganization root = SCOrganization.GetRoot(); SCOrganization org1 = SCObjectGenerator.PrepareOrganizationObject(); SCObjectOperations.Instance.AddOrganization(org1, root); SCOrganization org2 = SCObjectGenerator.PrepareOrganizationObject(); SCObjectOperations.Instance.AddOrganization(org2, root); SCObjectOperations.Instance.AddUserToOrganization(user, org1); SCObjectOperations.Instance.AddUserToOrganization(user, org2); SCObjectOperations.Instance.SetUserDefaultOrganization(user, org2); SCRelationObject relation1 = SchemaRelationObjectAdapter.Instance.Load(org1.ID, userLoaded.ID); SCRelationObject relation2 = SchemaRelationObjectAdapter.Instance.Load(org2.ID, userLoaded.ID); Assert.IsFalse(relation1.Default); Assert.IsTrue(relation2.Default); }
protected override void PrepareData(AUObjectOperationContext context) { this._OriginalRelation = this._Object.GetCurrentVeryParentRelation(); if (this._OriginalRelation == null || this._OriginalRelation.Status != SchemaObjectStatus.Normal) { throw new AUObjectValidationException("未找到此管理单元对应的上级关系"); } AUCommon.DoDbAction(() => { this._SourceObject = this._OriginalRelation.Parent; this._ActualTarget = this._Target ?? SchemaObjectAdapter.Instance.Load(this._Object.AUSchemaID); }); if (this._SourceObject == null || this._SourceObject.Status != SchemaObjectStatus.Normal) { throw new AUObjectValidationException("未找到此管理单元对应的上级对象"); } if (this._OriginalRelation.ParentID == this._ActualTarget.ID) { throw new AUObjectValidationException("此管理单元已经属于目标管理单元,无需移动。"); } AUCommon.DoDbAction(() => { this._TargetRelation = PrepareTargetRelation(this._ActualTarget, this._Object); this._NeedGenerateFullPaths = (this._Object is ISCRelationContainer) && (((ISCRelationContainer)this._Object).CurrentChildren.Count > 0); Validate(); }); }
public SCMoveObjectExecutor(SCOperationType opType, SCOrganization originalOrg, SCBase obj, SCOrganization targetOrg) : base(opType) { obj.NullCheck("obj"); targetOrg.NullCheck("targetOrg"); obj.ClearRelativeData(); targetOrg.ClearRelativeData(); if (originalOrg != null) { originalOrg.ClearRelativeData(); } this._Object = obj; this._OriginalOrganization = originalOrg; this._TargetOrganization = targetOrg; this._NeedChangeOwner = PrepareNeedChangeOwner(originalOrg, targetOrg, obj); if (originalOrg != null && originalOrg.ID == targetOrg.ID) { this._RelationExisted = true; } else { this._OriginalRelation = PreprareOriginalRelation(originalOrg, obj); this._TargetRelation = PrepareTargetRelation(targetOrg, obj); this._NeedGenerateFullPaths = (obj is ISCRelationContainer) && (((ISCRelationContainer)obj).GetCurrentChildrenCount() > 0); } }
public void SCQueryPermissionsByUserIDsSnapshotTest() { SCApplication application = SCObjectGenerator.PrepareApplicationObject(); SCObjectOperations.Instance.AddApplication(application); SCRole role = SCObjectGenerator.PrepareRoleObject(); SCObjectOperations.Instance.AddRole(role, application); SCPermission permission = SCObjectGenerator.PreparePermissionObject(); SCObjectOperations.Instance.AddPermission(permission, application); SCRelationObject relation = SCObjectOperations.Instance.JoinRoleAndPermission(role, permission); SCUser user1 = SCObjectGenerator.PrepareUserObject("RU1", "User1", "RoleUser1"); SCObjectOperations.Instance.AddUser(user1, SCOrganization.GetRoot()); SCObjectOperations.Instance.AddMemberToRole(user1, role); SchemaObjectCollection result = SCSnapshotAdapter.Instance.QueryPermissionsByUserIDs(new string[] { user1.ID }, false, DateTime.MinValue); Assert.IsTrue(result.Count > 0); Console.WriteLine(result[0].Properties.GetValue("Name", string.Empty)); Assert.AreEqual(permission.ID, result[0].ID); }
public SCOrganizationRelativeExecutor(SCOperationType opType, SCOrganization parent, SCBase data) : base(opType, data) { parent.NullCheck("organization"); data.ClearRelativeData(); parent.ClearRelativeData(); this._Parent = parent; this._Relation = PrepareRelationObject(parent, data); if (this.OperationType == SCOperationType.AddOrganization) { this._AclContainer = PrepareAclContainer(parent, data); } if (data is SCUser) { this._TargetParentRelations = data.CurrentParentRelations; if (this.OperationType == SCOperationType.AddUser && this._TargetParentRelations.Count == 0) { SCUser user = (SCUser)data; user.OwnerID = parent.ID; user.OwnerName = parent.Properties.GetValue("Name", string.Empty); } } }
public SCOrganizationRelativeExecutor(SCOperationType opType, SCOrganization parent, SCBase data) : base(opType, data) { parent.NullCheck("organization"); data.ClearRelativeData(); parent.ClearRelativeData(); this._Parent = parent; this._Relation = PrepareRelationObject(parent, data); if (this.OperationType == SCOperationType.AddOrganization) this._AclContainer = PrepareAclContainer(parent, data); if (data is SCUser) { this._TargetParentRelations = data.CurrentParentRelations; if (this.OperationType == SCOperationType.AddUser && this._TargetParentRelations.Count == 0) { SCUser user = (SCUser)data; user.OwnerID = parent.ID; user.OwnerName = parent.Properties.GetValue("Name", string.Empty); } } }
public SCMoveObjectExecutor(SCOperationType opType, SCOrganization originalOrg, SCBase obj, SCOrganization targetOrg) : base(opType) { obj.NullCheck("obj"); targetOrg.NullCheck("targetOrg"); obj.ClearRelativeData(); targetOrg.ClearRelativeData(); if (originalOrg != null) originalOrg.ClearRelativeData(); this._Object = obj; this._OriginalOrganization = originalOrg; this._TargetOrganization = targetOrg; this._NeedChangeOwner = PrepareNeedChangeOwner(originalOrg, targetOrg, obj); if (originalOrg != null && originalOrg.ID == targetOrg.ID) { this._RelationExisted = true; } else { this._OriginalRelation = PreprareOriginalRelation(originalOrg, obj); this._TargetRelation = PrepareTargetRelation(targetOrg, obj); this._NeedGenerateFullPaths = (obj is ISCRelationContainer) && (((ISCRelationContainer)obj).GetCurrentChildrenCount() > 0); } }
private SCRelationObject PrepareTargetRelation(SCOrganization targetOrg, SCBase obj) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID); if (relation == null) { relation = new SCRelationObject(targetOrg, obj); if (this._OriginalRelation != null) { relation.Default = _OriginalRelation.Default; } } else { if (relation.Status == SchemaObjectStatus.Normal) { this._RelationExisted = true; } else { relation.CalculateFullPathAndGlobalSort(targetOrg, obj); relation.Status = SchemaObjectStatus.Normal; } } return(relation); }
private SCRelationObject PrepareTargetRelation(SchemaObjectBase targetOrg, AdminUnit obj) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID); if (relation == null) { relation = new SCRelationObject(targetOrg, obj) { Default = true }; } else { if (relation.Status == SchemaObjectStatus.Normal) { this._RelationExisted = true; } else { relation.CalculateFullPathAndGlobalSort(targetOrg, obj); relation.Status = SchemaObjectStatus.Normal; } } return(relation); }
private void DoFullPathValidate(SCRelationObject relation, string fullPath, string key, ValidationResults validateResults) { SCRelationObjectCollection relations = SchemaRelationObjectAdapter.Instance.LoadByFullPath(fullPath, this.includingDeleted, DateTime.MinValue); SCRelationObject existedRelation = relations.Find(r => r.ParentID == relation.ParentID && r.ID != relation.ID); if (existedRelation != null) RecordValidationResult(validateResults, string.Format(this.MessageTemplate, existedRelation.FullPath), relation, key); }
private void DoFullPathValidate(SCRelationObject relation, string fullPath, string key, ValidationResults validateResults) { SCRelationObjectCollection relations = SchemaRelationObjectAdapter.Instance.LoadByFullPath(fullPath, this.includingDeleted, DateTime.MinValue); SCRelationObject existedRelation = relations.Find(r => r.ParentID == relation.ParentID && r.ID != relation.ID); if (existedRelation != null) { RecordValidationResult(validateResults, string.Format(this.MessageTemplate, existedRelation.FullPath), relation, key); } }
/// <summary> /// 获取根关系对象 /// </summary> /// <returns>一个表示根关系的<see cref="SCRelationObject"/>对象</returns> public static SCRelationObject GetRootRelationObject() { SCRelationObject result = new SCRelationObject(); result.ParentSchemaType = StandardObjectSchemaType.Organizations.ToString(); result.ID = RootOrganizationID; result.InnerSort = 0; result.ChildSchemaType = StandardObjectSchemaType.Organizations.ToString(); result.FullPath = string.Empty; result.GlobalSort = string.Empty; return result; }
public SCJoinRoleAndPermissionExecutor(SCOperationType opType, SCRole role, SCPermission permission) : base(opType) { role.NullCheck("role"); permission.NullCheck("permission"); role.ClearRelativeData(); permission.ClearRelativeData(); this._Relation = PrepareRelationObject(role, permission); this._Role = role; this._Permission = permission; }
private SCRelationObject PreprareOriginalRelation(SCOrganization originalOrg, SCBase obj) { SCRelationObject relation = null; if (originalOrg != null) { relation = SchemaRelationObjectAdapter.Instance.Load(originalOrg.ID, obj.ID); } else { relation = obj.CurrentParentRelations.FirstOrDefault(); this._OriginalOrganization = (SCOrganization)obj.CurrentParents.FirstOrDefault(); } return(relation); }
public void RemoveUserAndOrganizationRelationTest() { SCOrganization org = SCObjectGenerator.PrepareOrganizationObject(); SCUser user = SCObjectGenerator.PrepareUserObject(); SCRelationObject relation = UpdateRelation(org, user); SCRelationObject relationLoaded = SchemaRelationObjectAdapter.Instance.Load(org.ID, user.ID); Console.WriteLine("Org ID: {0}, User ID: {1}", org.ID, user.ID); SchemaRelationObjectAdapter.Instance.UpdateStatus(relationLoaded, SchemaObjectStatus.Deleted); relationLoaded = SchemaRelationObjectAdapter.Instance.Load(org.ID, user.ID); Assert.AreEqual(SchemaObjectStatus.Deleted, relationLoaded.Status); }
public static ClientSchemaRelation ToClientSchemaObject(this SCRelationObject pcRelation) { ClientSchemaRelation result = new ClientSchemaRelation(); FillCommon(pcRelation, result); result.ParentID = pcRelation.ParentID; result.ChildID = pcRelation.ID; result.ChildSchemaType = pcRelation.ChildSchemaType; result.ParentSchemaType = pcRelation.ParentSchemaType; result.Default = pcRelation.Default; result.FullPath = pcRelation.FullPath; result.InnerSort = pcRelation.InnerSort; result.GolbalSort = pcRelation.GlobalSort; return(result); }
private void ImportOneGroup(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations exec, SchemaObjectCollection parentObjects, SchemaObjectCollection memberObjects, int allCount, int count, SchemaObjectBase grp) { if (grp.SchemaType == "Groups") { try { var summaryName = grp.Properties.GetValue <string>("Name", "未命名"); context.SetStatus(count, allCount, "正在导入对象:" + summaryName); if (this.IncludeSelf) { SCRelationObject parentOrgRelation = (SCRelationObject)objectSet.Relations.Find(m => ((SCRelationObject)m).ParentSchemaType == "Organizations" && ((SCRelationObject)m).ChildSchemaType == "Groups" && ((SCRelationObject)m).ID == grp.ID); if (parentOrgRelation == null) { throw new HttpException("未找到群组的父级组织"); } var parentOrg = (SCOrganization)(parentObjects != null ? (from p in parentObjects where p.ID == parentOrgRelation.ParentID select p).FirstOrDefault() : null); if (parentOrg == null || parentOrg.Status != SchemaObjectStatus.Normal) { throw new HttpException("群组的父级组织不存在或者已删除,未能导入群组。"); } exec.AddGroup((SCGroup)grp, parentOrg); context.AppendLog("已执行导入对象" + summaryName); } ImportMembers(objectSet, context, exec, memberObjects, grp); ImportConditions(objectSet, context, grp); } catch (Exception ex) { context.AppendLog("对项的操作失败,原因是:" + ex.Message); } } else { context.AppendLog("已跳过不是群组的项"); } }
private SCRelationObject PrepareRelationObject(SCRole role, SCPermission permission) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(role.ID, permission.ID); if (relation == null) { relation = new SCRelationObject(role, permission); } else { if (relation.Status == SchemaObjectStatus.Normal) { this._RelationExisted = true; } else { relation.Status = SchemaObjectStatus.Normal; } } return(relation); }
private SCRelationObject PrepareRelationObject(SCOrganization parent, SCBase data) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(parent.ID, data.ID); if (relation == null) { relation = new SCRelationObject(parent, data); } else { if (relation.Status == SchemaObjectStatus.Normal) { this._RelationExisted = true; } else { relation.Status = SchemaObjectStatus.Normal; } } return(relation); }
private static SCRelationObject UpdateRelation(SCOrganization org, SCUser user) { SCOrganization root = SCOrganization.GetRoot(); SCRelationObject orgRelation = new SCRelationObject(root, org); SCRelationObject relation = new SCRelationObject(org, user); SCActionContext.Current.DoActions(() => { using (TransactionScope scope = TransactionScopeFactory.Create()) { SchemaObjectAdapter.Instance.Update(org); SchemaRelationObjectAdapter.Instance.Update(orgRelation); SchemaObjectAdapter.Instance.Update(user); SchemaRelationObjectAdapter.Instance.Update(relation); scope.Complete(); } }); return relation; }
private static void ValidateName(string name, string codeName, ValidationResult result, AUSchema schema, SchemaObjectBase targetUnit) { var actualParent = (SchemaObjectBase)targetUnit ?? schema; var adminUnit = new AdminUnit() { ID = UuidHelper.NewUuidString(), CodeName = codeName, Name = name, AUSchemaID = schema.ID }; var validationObjResult = adminUnit.Validate(); result.ObjectValidationResult = validationObjResult.ResultCount > 0 ? ToMessage(validationObjResult.First()) : "通过"; result.Passed &= validationObjResult.ResultCount == 0; if (result.Passed) { SCRelationObject relation = new SCRelationObject(actualParent, adminUnit); var existedObj = AU.Adapters.AUSnapshotAdapter.Instance.LoadAUByChildName(name, actualParent.ID, AUCommon.SchemaAdminUnit, true, DateTime.MinValue); result.NameValidationResult = existedObj.Count > 0 ? "此名称已经被占用,请使用其他名称" : "通过"; result.Passed &= existedObj.Count == 0; } }
private SCRelationObject PrepareTargetRelation(SCOrganization targetOrg, SCBase obj) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID); if (relation == null) { relation = new SCRelationObject(targetOrg, obj); if (this._OriginalRelation != null) { relation.Default = _OriginalRelation.Default; } } else { if (relation.Status == SchemaObjectStatus.Normal) this._RelationExisted = true; else { relation.CalculateFullPathAndGlobalSort(targetOrg, obj); relation.Status = SchemaObjectStatus.Normal; } } return relation; }
public void TestSerializeRelation() { System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var org = SCObjectGenerator.PrepareOrganizationObject(); var user = SCObjectGenerator.PrepareUserObject(); SCRelationObject obj1 = new SCRelationObject(org, user); obj1.CreateDate = DateTime.Now; obj1.VersionEndTime = new DateTime(567890); obj1.VersionEndTime = DateTime.MaxValue; obj1.ID = MCS.Library.Core.UuidHelper.NewUuidString(); obj1.InnerSort = 23; obj1.Status = SchemaObjectStatus.Deleted; System.IO.MemoryStream ms = new System.IO.MemoryStream(); bf.Serialize(ms, obj1); ms.Seek(0, System.IO.SeekOrigin.Begin); var obj2 = (SCRelationObject)bf.Deserialize(ms); RelationAssert(obj1, obj2); }
private SCRelationObject PrepareTargetRelation(SchemaObjectBase targetOrg, AdminUnit obj) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(targetOrg.ID, obj.ID); if (relation == null) { relation = new SCRelationObject(targetOrg, obj) { Default = true }; } else { if (relation.Status == SchemaObjectStatus.Normal) this._RelationExisted = true; else { relation.CalculateFullPathAndGlobalSort(targetOrg, obj); relation.Status = SchemaObjectStatus.Normal; } } return relation; }
private void RelationAssert(SCRelationObject obj1, SCRelationObject obj2) { Assert.IsNotNull(obj1); Assert.IsNotNull(obj2); Assert.IsTrue(obj1.GetType() == obj2.GetType()); Assert.IsTrue(obj2.VersionEndTime == obj1.VersionEndTime); Assert.IsTrue(obj2.VersionStartTime == obj1.VersionStartTime); Assert.IsTrue(obj2.SchemaType == obj1.SchemaType); Assert.IsTrue(obj2.CreateDate == obj1.CreateDate); if (obj2.Creator != null && obj1.Creator != null) { Assert.AreEqual(obj2.Creator.ID, obj1.Creator.ID); Assert.AreEqual(obj2.Creator.DisplayName, obj2.Creator.DisplayName); } else { Assert.AreEqual(obj2.Creator, obj1.Creator); //两者或者都为空 } Assert.IsTrue(obj1.ID == obj1.ID); Assert.IsTrue(obj2.Status == obj1.Status); foreach (string key in obj1.Properties.GetAllKeys()) { Assert.AreEqual(obj2.Properties[key].StringValue, obj1.Properties[key].StringValue); } }
private SCRelationObject PrepareRelationObject(SCRole role, SCPermission permission) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(role.ID, permission.ID); if (relation == null) relation = new SCRelationObject(role, permission); else { if (relation.Status == SchemaObjectStatus.Normal) this._RelationExisted = true; else relation.Status = SchemaObjectStatus.Normal; } return relation; }
public ListRelations(IList list, object key, SCRelationObject value) { this.value = value; this.key = key; this.list = list; }
private SCRelationObject PrepareRelationObject(SCOrganization parent, SCBase data) { SCRelationObject relation = SchemaRelationObjectAdapter.Instance.Load(parent.ID, data.ID); if (relation == null) relation = new SCRelationObject(parent, data); else { if (relation.Status == SchemaObjectStatus.Normal) this._RelationExisted = true; else relation.Status = SchemaObjectStatus.Normal; } return relation; }
protected override void PrepareData(AUObjectOperationContext context) { this._OriginalRelation = this._Object.GetCurrentVeryParentRelation(); if (this._OriginalRelation == null || this._OriginalRelation.Status != SchemaObjectStatus.Normal) throw new AUObjectValidationException("未找到此管理单元对应的上级关系"); AUCommon.DoDbAction(() => { this._SourceObject = this._OriginalRelation.Parent; this._ActualTarget = this._Target ?? SchemaObjectAdapter.Instance.Load(this._Object.AUSchemaID); }); if (this._SourceObject == null || this._SourceObject.Status != SchemaObjectStatus.Normal) throw new AUObjectValidationException("未找到此管理单元对应的上级对象"); if (this._OriginalRelation.ParentID == this._ActualTarget.ID) throw new AUObjectValidationException("此管理单元已经属于目标管理单元,无需移动。"); AUCommon.DoDbAction(() => { this._TargetRelation = PrepareTargetRelation(this._ActualTarget, this._Object); this._NeedGenerateFullPaths = (this._Object is ISCRelationContainer) && (((ISCRelationContainer)this._Object).CurrentChildren.Count > 0); Validate(); }); }
private void PrepareRelationObject() { AUCommon.DoDbAction(() => { this.oldRelationToSchema = SchemaRelationObjectAdapter.Instance.Load(((AdminUnit)this.Data).AUSchemaID, this.Data.ID); this.oldRelationToUnit = SchemaRelationObjectAdapter.Instance.LoadByObjectID(this.Data.ID).Where(m => m.Status == SchemaObjectStatus.Normal && m.ParentSchemaType == AUCommon.SchemaAdminUnit).FirstOrDefault(); if (this.Data.Status == SchemaObjectStatus.Normal) //添加操作 { this.actualParent = inputParent != null ? SchemaObjectAdapter.Instance.Load(this.inputParent.ID) : this.schema; if (this.actualParent.ID == this.Data.ID) throw new AUObjectValidationException("管理单元的父管理单元不能是其自身。"); if (this.actualParent == null || this.actualParent.Status != SchemaObjectStatus.Normal) throw new AUObjectValidationException("指定的父管理单元在系统中不存在或已删除"); if (this.oldRelationToSchema != null && this.oldRelationToSchema.Status == SchemaObjectStatus.Normal && this.oldRelationToUnit != null && this.oldRelationToUnit.Status == SchemaObjectStatus.Normal) throw new AUObjectValidationException("关系错误。此管理单元已经存在,但存在错误的关联。一个管理单元不能同时与Schema和另一个管理单元关联"); else if (this.oldRelationToSchema != null && this.oldRelationToSchema.Status == SchemaObjectStatus.Normal && actualParent.ID != this.oldRelationToSchema.ParentID) throw new AUObjectValidationException("关系错误。此管理单元已经与另一个Schema关联。"); else if (this.oldRelationToUnit != null && this.oldRelationToUnit.Status == SchemaObjectStatus.Normal && actualParent.ID != this.oldRelationToUnit.ParentID) throw new AUObjectValidationException("关系错误。此管理单元已经与另一个AdminUnit关联。"); } else //删除操作,忽略传,m入的parent参数,因此需要查找真实的parent { if (oldRelationToUnit != null && oldRelationToUnit.Status == SchemaObjectStatus.Normal) { this.actualParent = SchemaObjectAdapter.Instance.Load(oldRelationToUnit.ParentID); } else if (oldRelationToSchema != null && oldRelationToSchema.Status == SchemaObjectStatus.Normal) { this.actualParent = schema; } } this.oldRelationToChildren = SchemaRelationObjectAdapter.Instance.LoadByParentID(this.Data.ID); if (actualParent is AUSchema) { // 应该是跟Schema关联 if (oldRelationToSchema != null && oldRelationToSchema.Status == SchemaObjectStatus.Normal) { relationExists = true; } targetRelation = new SCRelationObject(schema, this.Data) { Status = SchemaObjectStatus.Normal }; } else { targetRelation = SchemaRelationObjectAdapter.Instance.Load(actualParent.ID, this.Data.ID); if (targetRelation != null) { if (targetRelation.Status == SchemaObjectStatus.Normal) { relationExists = true; } targetRelation.Status = SchemaObjectStatus.Normal; } else { targetRelation = new SCRelationObject(actualParent, this.Data) { Status = SchemaObjectStatus.Normal }; } } }); }
private static SCRelationObject FindActualParent(SCRelationObject result, SCParentsRelationObjectCollection parents) { SCRelationObject toSchema = null, toUnit = null; foreach (SCRelationObject r in parents) { if (r.ParentSchemaType == AUCommon.SchemaAUSchema) { if (toSchema == null || r.Status == SchemaObjectStatus.Normal) toSchema = r; } else if (r.ParentSchemaType == AUCommon.SchemaAdminUnit) { if (toUnit == null || r.Status == SchemaObjectStatus.Normal) toUnit = r; } } if (toSchema == null && toUnit != null) result = toUnit; else if (toUnit == null && toSchema != null) result = toSchema; else if (toUnit == null && toSchema == null) result = null; else if (toUnit.Status == SchemaObjectStatus.Normal && toSchema.Status == SchemaObjectStatus.Normal) throw new AUObjectValidationException("管理单元存在错误的关系"); else if (toUnit.Status == SchemaObjectStatus.Normal) result = toUnit; else result = toSchema; return result; }