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;
            }
        }