public async Task EditTeacherAsync(Teacher teacher, string[] Disciplines) { if (teacher.Id == 0) { await this.CreateTeacherAsync(teacher, Disciplines); return; } else { foreach (var item in Disciplines) { Discipline discipline = await context.Disciplines .Where(x => x.Name == item) .FirstOrDefaultAsync(); TrainingCourse trainingCourse = await CreateTrainingCourseAsync (TrainingCourseDisciplineId: discipline.Id, TrainingCourseTeacherId: teacher.Id); } IQueryable<TrainingCourse> disciplinesForRemove = context.TrainingCourses .Where(x => x.TeacherId == teacher.Id && !Disciplines.Contains(x.Discipline.Name)); foreach (var item in disciplinesForRemove) { context.Entry(item).State = EntityState.Deleted; } context.Entry(teacher).State = EntityState.Modified; await context.SaveChangesAsync(); } }
// GET: Teachers/Edit/5 public async Task<ActionResult> Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Teacher teacher; if (id == 0) { teacher = new Teacher() { TrainingCourses = new List<TrainingCourse>() }; } else { teacher = await repository.Teachers .Include(x => x.Department) .Include(x => x.TrainingCourses.Select(d => d.Discipline)) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (teacher == null) { return HttpNotFound(); } } ViewBag.DepartmentId = new SelectList(repository.Departments, "Id", "Name", teacher.DepartmentId); ViewBag.Disciplines = new MultiSelectList(repository.Disciplines.Select(x => x.Name), teacher.TrainingCourses.Select(x=>x.Discipline.Name)); return View(teacher); }
public async Task CreateTeacherAsync(Teacher teacher, string[] Disciplines) { teacher.Id = 0; context.Entry(teacher).State = EntityState.Added; foreach (var item in Disciplines) { Discipline discipline = await context.Disciplines .Include(x=>x.TrainingCourses) .Where(x => x.Name == item) .FirstOrDefaultAsync(); TrainingCourse trainingCouse = new TrainingCourse() { Teacher = teacher, Discipline = discipline }; discipline.TrainingCourses.Add(trainingCouse); context.Entry(discipline).State = EntityState.Modified; } await context.SaveChangesAsync(); }