/// <summary> /// 添加给定的用户到给定的队伍中。 /// </summary> /// <param name="team">队伍句柄。</param> /// <param name="user">用户句柄。</param> /// <exception cref="ArgumentNullException"/> /// <exception cref="TeamNotFoundException"/> /// <exception cref="UserNotFoundException"/> public void AddUserToTeam(TeamHandle team, UserHandle user) { if (team == null) { throw new ArgumentNullException(nameof(team)); } if (user == null) { throw new ArgumentNullException(nameof(user)); } m_factory.WithContext(context => { TeamProfileEntity teamEntity = context.QueryTeamProfileEntity(team.TeamId); if (teamEntity == null) { throw new TeamNotFoundException(team); } UserProfileEntity userEntity = context.QueryUserProfileEntity(user.Username); if (userEntity == null) { throw new UserNotFoundException(user); } teamEntity.Members.Add(userEntity); context.SaveChanges(); }); }
/// <summary> /// 在数据库中创建一个新的队伍实体对象。 /// </summary> /// <returns>新创建的队伍句柄。</returns> public TeamHandle CreateTeam() { TeamProfileEntity entity = new TeamProfileEntity(); m_factory.WithContext(context => { entity = context.AddTeamProfileEntity(entity); context.SaveChanges(); }); return(TeamHandle.FromTeamEntity(entity)); }
/// <summary> /// 根据指定的队伍查询参数查询队伍句柄。 /// </summary> /// <param name="query">查询参数。</param> /// <returns>查询到的队伍句柄结果对象。</returns> /// <exception cref="ArgumentNullException"/> public ReadOnlyCollection <TeamHandle> QueryTeams(TeamQueryParameter query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } if (query.QueryByName && query.Name == null) { throw new ArgumentNullException(nameof(query.Name)); } if (query.QueryByLeader && query.Leader == null) { throw new ArgumentNullException(nameof(query.Leader)); } return(m_factory.WithContext(context => { IQueryable <TeamProfileEntity> set = context.GetAllTeamProfiles(); if (query.QueryByName) { set = UserDataContext.QueryTeamProfileEntityByName(set, query.Name); } if (query.QueryByLeader) { set = UserDataContext.QueryTeamProfileEntityByLeader(set, query.Leader); } // 对查询结果进行排序以准备分页。 set = set.OrderBy(ent => ent.Id); if (query.EnablePageQuery) { set = set.Page(query.PageQuery); } List <TeamHandle> handles = new List <TeamHandle>(); foreach (TeamProfileEntity ent in set) { handles.Add(TeamHandle.FromTeamEntity(ent)); } return new ReadOnlyCollection <TeamHandle>(handles); })); }
/// <summary> /// 从数据库中移除给定的队伍。 /// </summary> /// <param name="team">要移除的队伍句柄。</param> /// <exception cref="ArgumentNullException"/> public void RemoveTeam(TeamHandle team) { if (team == null) { throw new ArgumentNullException(nameof(team)); } m_factory.WithContext(context => { TeamProfileEntity entity = context.QueryTeamProfileEntity(team.TeamId); if (entity == null) { return; } context.RemoveTeamProfileEntity(entity); context.SaveChanges(); }); }
/// <summary> /// 从给定的队伍中移除给定的用户。 /// </summary> /// <param name="team">队伍句柄。</param> /// <param name="user">用户句柄。</param> /// <exception cref="ArgumentNullException"/> /// <exception cref="TeamNotFoundException"/> /// <exception cref="UserNotFoundException"/> public void RemoveUserFromTeam(TeamHandle team, UserHandle user) { if (team == null) { throw new ArgumentNullException(nameof(team)); } if (user == null) { throw new ArgumentNullException(nameof(user)); } m_factory.WithContext(context => { TeamProfileEntity teamEntity = context.QueryTeamProfileEntity(team.TeamId); if (teamEntity == null) { throw new TeamNotFoundException(team); } UserProfileEntity userEntity = context.QueryUserProfileEntity(user.Username); if (userEntity == null) { throw new UserNotFoundException(user); } foreach (UserProfileEntity teamUser in teamEntity.Members) { if (string.Compare(teamUser.Username, userEntity.Username, false) == 0) { teamEntity.Members.Remove(teamUser); break; } } context.SaveChanges(); }); }
/// <summary> /// 使用给定的队伍句柄和异常消息创建 TeamException 类的新实例。 /// </summary> /// <param name="handle"></param> /// <param name="message"></param> public TeamException(TeamHandle handle, string message) : base(message) { Handle = handle; }
/// <summary> /// 使用给定的队伍句柄创建 TeamException 类的新实例。 /// </summary> /// <param name="handle">队伍句柄。</param> public TeamException(TeamHandle handle) : base($"队伍 {handle.TeamId} 触发了异常。") { Handle = handle; }