/// <summary> /// 创建一个新的比赛并返回相应的比赛句柄。 /// </summary> /// <returns></returns> public ContestHandle CreateContest() { // 创建新的比赛实体对象。 return(m_factory.WithContext(context => { ContestEntity entity = new ContestEntity(); entity = context.AddContest(entity); // 为新创建的比赛分配配置文件。 entity.ContestConfigurationFile = string.Concat(ContestDirectory, "\\", entity.Id); context.SaveChanges(); return ContestHandle.FromContestEntity(entity); })); }
/// <summary> /// 从给定的比赛 ID 创建 ContestHandle 类的新实例。 /// </summary> /// <param name="contestId">比赛 ID。</param> /// <returns>从给定的比赛 ID 创建的 ContestHandle 类对象。若数据库中不存在这样的比赛实体对象,返回 null。</returns> public ContestHandle QueryContestById(int contestId) { return(m_factory.WithContext(context => { ContestEntity entity = context.QueryContestById(contestId); if (entity == null) { return null; } else { return ContestHandle.FromContestEntity(entity); } })); }
/// <summary> /// 使用给定的查询参数查询比赛句柄。 /// </summary> /// <param name="query">封装查询参数的对象。</param> /// <returns>一个查询结果对象,其中包含了所有查询到的比赛句柄。</returns> /// <exception cref="ArgumentNullException"/> /// <exception cref="ArgumentException"/> public ReadOnlyCollection <ContestHandle> QueryContests(ContestQueryParameter query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } if (query.QueryByTitle && query.Title == null) { throw new ArgumentNullException(nameof(query.Title)); } if (query.QueryByCreator && query.Creator == null) { throw new ArgumentNullException(nameof(query.Creator)); } return(m_factory.WithContext(context => { IQueryable <ContestEntity> set = DoQuery(context, query); // 对数据实体对象进行排序以准备执行分页操作。 set = set.OrderByDescending(entity => entity.CreationTime); if (query.EnablePagedQuery) { // 执行分页。 set = set.Page(query.PageQuery); } List <ContestHandle> handles = new List <ContestHandle>(); foreach (ContestEntity ent in set) { handles.Add(ContestHandle.FromContestEntity(ent)); } return new ReadOnlyCollection <ContestHandle>(handles); })); }
/// <summary> /// 从给定的比赛句柄以及异常消息创建 ContestException 类的新实例。 /// </summary> /// <param name="handle">比赛句柄。</param> /// <param name="message">异常消息。</param> public ContestException(ContestHandle handle, string message) : base(message) { Handle = handle; }
/// <summary> /// 从给定的比赛句柄创建 ContestException 类的新实例。 /// </summary> /// <param name="handle"></param> public ContestException(ContestHandle handle) : base("比赛系统发生异常。") { Handle = handle; }