/// <summary>
        /// 注册当前用户
        /// </summary>
        /// <param name="cid">竞赛ID</param>
        /// <param name="realName">真实姓名</param>
        /// <returns>是否注册成功</returns>
        public static Boolean RegisterCurrentUser(Int32 cid, String realName)
        {
            if (!UserManager.IsUserLogined)
            {
                throw new UserUnLoginException();
            }

            if (String.IsNullOrEmpty(realName))
            {
                throw new InvalidInputException("Real Name can not be NULL!");
            }

            if (!String.IsNullOrEmpty(realName) && realName.Length > ContestUserRepository.REALNAME_MAXLEN)
            {
                throw new InvalidInputException("Real Name is too long!");
            }

            ContestEntity contest = ContestManager.GetRegisterContest(cid);
            String userName = UserManager.CurrentUserName;

            if (ContestUserRepository.Instance.ExistsEntity(contest.ContestID, userName))
            {
                throw new InvalidInputException("You have already registered this contest!");
            }

            ContestUserEntity entity = new ContestUserEntity()
            {
                ContestID = contest.ContestID,
                UserName = userName,
                RealName = realName,
                IsEnable = false,
                RegisterTime = DateTime.Now
            };

            return (ContestUserRepository.Instance.InsertEntity(entity) > 0);
        }
        /// <summary>
        /// 添加指定ID的竞赛用户
        /// </summary>
        /// <param name="cid">竞赛ID</param>
        /// <param name="usernames">竞赛用户</param>
        /// <returns>是否成功添加</returns>
        public static IMethodResult AdminInsertContestUsers(Int32 cid, String usernames)
        {
            if (!AdminManager.HasPermission(PermissionType.ContestManage))
            {
                throw new NoPermissionException();
            }

            if (String.IsNullOrEmpty(usernames))
            {
                return MethodResult.InvalidRequest(RequestType.User);
            }

            Dictionary<String, ContestUserEntity> dict = new Dictionary<String, ContestUserEntity>();
            StringBuilder names = new StringBuilder();
            String[] namelist = usernames.Split('\n');

            for (Int32 i = 0; i < namelist.Length; i++)
            {
                String[] name = namelist[i].Replace('\t', ' ').Split(' ');

                if (name.Length < 1 || String.IsNullOrEmpty(name[0].Trim()))
                {
                    continue;
                }

                ContestUserEntity entity = new ContestUserEntity()
                {
                    ContestID = cid,
                    UserName = name[0].Replace("\r", "").Trim(),
                    RealName = (name.Length >= 2 ? name[1].Replace("\r", "").Trim() : ""),
                    IsEnable = true,
                    RegisterTime = DateTime.Now
                };

                if (!dict.ContainsKey(entity.UserName))
                {
                    names.Append(names.Length > 0 ? "," : "").Append(entity.UserName);
                }

                dict[entity.UserName] = entity;
            }

            try
            {
                Int32 count = ContestUserRepository.Instance.InsertEntities(cid, names.ToString(), dict);

                if (count <= 0)
                {
                    return MethodResult.FailedAndLog("No contest user was added!");
                }

                ContestUserCache.RemoveContestUserListCache(cid);

                return MethodResult.SuccessAndLog<Int32>(count, "Admin add contest user, cid = {0}, username = {1}", cid.ToString(), usernames);
            }
            catch (DbException)
            {
                return MethodResult.FailedAndLog("Failed to add these users, please check whether the names are all correct.");
            }
        }