private void detach_Waitlists(Waitlist entity) { this.SendPropertyChanging(); entity.Course = null; }
private void attach_Waitlists(Waitlist entity) { this.SendPropertyChanging(); entity.Course = this; }
partial void DeleteWaitlist(Waitlist instance);
partial void UpdateWaitlist(Waitlist instance);
partial void InsertWaitlist(Waitlist instance);
//Get the selected student and course //Try to enroll the student in the course //If the course is full, put students on waitlist private void enrollButton_Click(object sender, EventArgs e) { if (this.studentsLB.SelectedItem == null) { MessageBox.Show("Select a student to enroll."); return; } Student student = getSelectedStudent(); //MessageBox.Show(student.ToString()); if (this.coursesLB.SelectedItem == null) { MessageBox.Show("Select a course to enroll in."); return; } Course course = getSelectedCourse(); //MessageBox.Show(course.ToString()); string msg = null; using (var db = new CoursemoDataContext()) { var TxOptions = new System.Transactions.TransactionOptions(); TxOptions.IsolationLevel = System.Transactions.IsolationLevel.Serializable; using (var Tx = new System.Transactions.TransactionScope( System.Transactions.TransactionScopeOption.Required, TxOptions)) { try { if (delay_flag) { Delay(); } var enrolled = from r in db.Registrations where r.Netid == student.netid where r.CRN == course.crn select r; if (delay_flag) { Delay(); } var waiting = from w in db.Waitlists where w.Netid == student.netid where w.CRN == course.crn select w; //Is the student already enrolled in this class? if (enrolled.Any()) { //MessageBox.Show(student.netid + " is already enrolled in course " + course.crn); msg = student.netid + " is already enrolled in course " + course.crn; } //Is the student on the waitlist for this class? else if (waiting.Any()) { //MessageBox.Show(student.netid + " is already on the waitlist for course " + course.crn); msg = student.netid + " is already on the waitlist for course " + course.crn; } //Student not enrolled or waiting for this course else { //Get number of registrations for this course if (delay_flag) { Delay(); } var query = (from r in db.Registrations where r.CRN == course.crn select r.RID).ToList(); //Is this class full? if (query.Count == course.capacity) { //MessageBox.Show(course.crn + " is full, putting " + student.netid + " on the waitlist for this course."); //Put on waitlist if (delay_flag) { Delay(); } Waitlist wait = new Waitlist { Netid = student.netid, CRN = course.crn, RegTime = DateTime.Now }; db.Waitlists.InsertOnSubmit(wait); if (delay_flag) { Delay(); } var placeInLine = from w in db.Waitlists where w.CRN == course.crn orderby w.RegTime select w.WID; //MessageBox.Show(student.netid + " put on waitlist for " + course.crn + ". Place in line: " + (placeInLine.Count() + 1).ToString()); msg = student.netid + " put on waitlist for " + course.crn + ". Place in line: " + (placeInLine.Count() + 1).ToString(); } else { //Enroll if (delay_flag) { Delay(); } Registration r = new Registration { Netid = student.netid, CRN = course.crn }; db.Registrations.InsertOnSubmit(r); //MessageBox.Show(student.netid + " enrolled in " + course.crn); msg = student.netid + " enrolled in " + course.crn; } } db.SubmitChanges(); Tx.Complete(); } catch (Exception ex) { Console.WriteLine(ex.Message); //msg = "Enrollment failed. Try again."; //Tx.Dispose(); } } MessageBox.Show(msg); } }