private void PrepareRolesForAdd() { foreach (AUSchemaRole sr in this.existingSchemaRoles) { bool enableRole = sr.Status == SchemaObjectStatus.Normal; AURole existingRole = AUCommon.FindMatchRole(this.existingUnitRoles, sr); AURole inputRole = this.InputRoles != null?AUCommon.FindMatchRole(this.InputRoles, sr) : null; if (inputRole != null && existingRole != null && inputRole.ID != existingRole.ID) { throw new AUObjectException(string.Format("导入的角色{0}与现有角色{1}的ID不一致,导致无法继续执行导入。", inputRole.ID, existingRole.ID)); } if (existingRole == null) { if (inputRole == null) { inputRole = new AURole() { ID = UuidHelper.NewUuidString(), SchemaRoleID = sr.ID, Status = SchemaObjectStatus.Normal } } ; inputRole.Status = SchemaObjectStatus.Normal; if (enableRole == false) { inputRole.Status = SchemaObjectStatus.Deleted; } pendingActions.Add(new AddMemberAction((AdminUnit)this.Data, inputRole)); } else if (existingRole.Status != sr.Status) { pendingActions.Add(sr.Status == SchemaObjectStatus.Normal ? (IPendingAction) new EnableMemberAction(existingRole, (AdminUnit)this.Data) : new RemoveMemberAction((AdminUnit)this.Data, existingRole)); } } }