public void CreateLeaveApplication(LeaveApplication leaveApplication) { if (IsScheduleConflict(leaveApplication)) { throw new InvalidOperationException("当前请假时间和已存在的请假申请冲突"); } AnnualLeaveStatistic annualLeaveStatistic = GetAnnualLeaveStatistic(leaveApplication.Initiator); if (leaveApplication.TotalDays > annualLeaveStatistic.RemainingDays) { throw new InvalidOperationException("剩余假期不足,请重新选择请假时间"); } annualLeaveStatistic.RemainingDays = annualLeaveStatistic.RemainingDays - leaveApplication.TotalDays; leaveApplication.TaskState = TaskState.Applying; using (DbContextTransaction transaction = _context.Database.BeginTransaction()) { try { _context.LeaveApplications.Add(leaveApplication); _context.AnnualLeaveStatistics.Attach(annualLeaveStatistic); _context.Entry(annualLeaveStatistic).State = EntityState.Modified; _context.SaveChanges(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); _logger.Error(e.Message, e); throw; } } }
public ReturnResult ModifyMeeting(Meeting meeting) { ReturnResult returnResult = new ReturnResult(); if (!IsScheduleConflict(meeting)) { lock (_locker) { using (DbContextTransaction transaction = _context.Database.BeginTransaction()) { try { _context.Attendees.Attach(meeting.Attendee); _context.Entry(meeting.Attendee).State = EntityState.Modified; _context.Meetings.Attach(meeting); _context.Entry(meeting).State = EntityState.Modified; _context.SaveChanges(); transaction.Commit(); returnResult.Result = true; return(returnResult); } catch (Exception e) { transaction.Rollback(); returnResult.Result = false; returnResult.Message = e.Message; _logger.Error("Faild to modify a Meeting", e); return(returnResult); } } } } returnResult.Result = false; returnResult.Message = "会议时间冲突"; return(returnResult); }