public async Task <int> Delete(int student_id)
        {
            try
            {
                using (StudentRecordsEntities db = new StudentRecordsEntities())
                {
                    Student std = await db.Students.FindAsync(student_id);

                    if (std != null)
                    {
                        if (db.StudentFiles.Any(x => x.StudentID == std.ID))
                        {
                            db.StudentFiles.RemoveRange(db.StudentFiles.Where(x => x.StudentID == std.ID));
                        }

                        db.Students.Remove(std);

                        return(await db.SaveChangesAsync());
                    }
                    else
                    {
                        return(await Task.FromResult(0));
                    }
                }
            }
            catch (Exception)
            {
                return(await Task.FromResult(0));
            }
        }
        public async Task <int> Update(Student std)
        {
            try
            {
                using (StudentRecordsEntities db = new StudentRecordsEntities())
                {
                    Student new_std = await db.Students.FindAsync(std.ID);

                    new_std.Name        = std.Name;
                    new_std.Grade       = std.Grade;
                    new_std.DateOfBirth = std.DateOfBirth;
                    new_std.Address     = std.Address;

                    db.Entry(new_std).State = EntityState.Modified;

                    if (std.StudentFiles != null && std.StudentFiles.Count > 0)
                    {
                        foreach (var item in std.StudentFiles)
                        {
                            db.StudentFiles.Add(new StudentFile {
                                FileSize = item.FileSize, FileName = item.FileName, StudentID = std.ID
                            });
                        }
                    }

                    return(await db.SaveChangesAsync());
                }
            }
            catch (Exception)
            {
                return(await Task.FromResult(0));
            }
        }
        public async Task <DataTableResponse> Search(DataTableRequest request)
        {
            try
            {
                int recordsTotal = 0, recordsFiltered = 0;

                using (StudentRecordsEntities dc = new StudentRecordsEntities())
                {
                    dc.Configuration.LazyLoadingEnabled = false;

                    if (string.IsNullOrEmpty(request.Search.Value))
                    {
                        var v = (from a in dc.Students.AsNoTracking()
                                 orderby a.ID
                                 select new { a.ID, a.Name, a.Grade });

                        if (request.Order.Any())
                        {
                            v = v.OrderBy(request.Order[0].Column.ToString() + " " + request.Order[0].Dir);
                        }

                        recordsTotal = v.Count();

                        var data = await v.Skip(() => request.Start).Take(() => request.Length).ToListAsync();

                        return(new DataTableResponse {
                            draw = request.Draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data
                        });
                    }
                    else
                    {
                        var v = (from a in dc.Students.AsNoTracking()
                                 orderby a.ID
                                 select new { a.ID, a.Name, a.Grade });

                        recordsTotal = v.Count();

                        v = v.Where(x => x.Name.StartsWith(request.Search.Value));

                        if (request.Order.Any())
                        {
                            v = v.OrderBy(request.Order[0].Column.ToString() + " " + request.Order[0].Dir);
                        }

                        recordsFiltered = v.Count();

                        var data = await v.Skip(() => request.Start).Take(() => request.Length).ToListAsync();

                        return(new DataTableResponse {
                            draw = request.Draw, recordsFiltered = recordsFiltered, recordsTotal = recordsTotal, data = data
                        });
                    }
                }
            }
            catch (Exception)
            {
                return(null);
            }
        }
        public async Task <int> Add(Student std)
        {
            try
            {
                using (StudentRecordsEntities db = new StudentRecordsEntities())
                {
                    db.Students.Add(std);

                    return(await db.SaveChangesAsync());
                }
            }
            catch (Exception)
            {
                return(await Task.FromResult(0));
            }
        }
        public async Task <Student> Show(int student_id)
        {
            using (StudentRecordsEntities db = new StudentRecordsEntities())
            {
                var std = await db.Students.AsNoTracking().Where(x => x.ID == student_id).FirstOrDefaultAsync();

                if (std != null)
                {
                    return new Student {
                               ID = std.ID, Name = std.Name, Grade = std.Grade, DateOfBirth = std.DateOfBirth, Address = std.Address, StudentFiles = std.StudentFiles
                    }
                }
                ;
                else
                {
                    return(null);
                }
            }
        }
        public async Task <string> DeleteFile(int file_id)
        {
            try
            {
                using (StudentRecordsEntities db = new StudentRecordsEntities())
                {
                    StudentFile file = await db.StudentFiles.FindAsync(file_id);

                    string x = file.FileName;

                    db.StudentFiles.Remove(file);

                    await db.SaveChangesAsync();

                    return(await Task.FromResult(x));
                }
            }
            catch (Exception)
            {
                return(await Task.FromResult(""));
            }
        }
 public void InitializeTestParams()
 {
     db         = new StudentRecordsEntities();
     controller = new API.Controllers.StudentController();
 }