public async Task <TEntity> Add(TEntity entity) { await Context.Set <TEntity>().AddAsync(entity); await Context.SaveChangesAsync(); return(entity); }
public override async Task <Student> Update(Student student) { try { /*Context.Entry<Student>(student).State = EntityState.Modified; * Context.Entry<Student>(student).Collection("StudentSubjects").CurrentValue = student.StudentSubjects; * Context.Entry<Student>(student).Collection("StudentSubjects").IsModified = true; * //context.Update<TEntity>(entity); * await Context.SaveChangesAsync(); * return student;*/ var existingStudent = await Context.Students.Include(p => p.StudentSubjects).FirstOrDefaultAsync(t => t.Id == student.Id); existingStudent.Email = student.Email; existingStudent.FirstName = student.FirstName; existingStudent.LastName = student.LastName; existingStudent.Mobile = student.Mobile; if (existingStudent.StudentSubjects == null) { existingStudent.StudentSubjects = new List <StudentSubject>(); } var oldIds = existingStudent.StudentSubjects?.Select(p => p.SubjectId).ToList() ?? new List <int>(); var newIds = student.StudentSubjects?.Select(p => p.SubjectId).ToList() ?? new List <int>(); var missingIds = newIds.Where(p => oldIds.All(p2 => p2 != p)); var deleteIds = oldIds.Where(p => newIds.All(p2 => p2 != p)); foreach (var id in missingIds) { await _context.StudentSubjects.AddAsync(new StudentSubject() { SubjectId = id, StudentId = student.Id }); } foreach (var deleteId in deleteIds) { var deleteItem = await _context.StudentSubjects.FirstOrDefaultAsync(p => p.SubjectId == deleteId && p.StudentId == student.Id); _context.StudentSubjects.Remove(deleteItem); } var result = await _context.SaveChangesAsync(); return(await Get(student.Id)); } catch (Exception ex) { //todo: handle error throw; } }