public bool CreateStudent(StudentViewModel studentVM) { using (var dbosisTransaction = db.Database.BeginTransaction()) { try { //user auto mapper to fill student object incluing // navigation object studentcurrentyear Student studentmap = Mapper.Map<Student>(studentVM); studentmap.StudentID = Guid.NewGuid(); studentmap.StudentCurrentYear[0].PromotedOn = DateTime.Now; //The current is always true when create a student // for the first time studentmap.StudentCurrentYear[0].Active = true; // the school table/object has registration no // which needs to update for for every student // always store the last registration no given to' // a student var LastRegNo = db.Database.SqlQuery<int>("Select LastRegNo from Schools with (XLOCK) where SchoolID={0}", studentmap.StudentCurrentYear[0].SchoolRefID).FirstOrDefault<int>(); // increment the lastregno by one int NewRegNo = LastRegNo + 1; //Update database school table with the new latest regno db.Database.ExecuteSqlCommand("UPDATE Schools SET LastRegNo = {0} where schoolID= {1}", NewRegNo, studentmap.StudentCurrentYear[0].SchoolRefID); // assign new registration to student object Registration No property studentmap.RegistrationNo = NewRegNo; //Add student object to student db context db.Students.Add(studentmap); //User Task Parallel Library(TPL) to save changes in asynchronous(background) way db.SaveChanges(); //Commit the transaction dbosisTransaction.Commit(); return true; } catch (Exception e) { dbosisTransaction.Rollback(); _modelstate.AddModelError("", e.InnerException); return false; } } }
// GET: /Student/Create public ActionResult Create() { //This new code from previous version optimized for performance //context object does not return all the colums of table for dropdown boxes //only id and display columns are fetched(checked with sql profiler) ViewBag.SchoolRefID = new SelectList(db.Schools.AsNoTracking().Select(x => new { x.SchoolID, x.SchoolName }), "SchoolID", "SchoolName"); ViewBag.AcademicYearRefID = new SelectList(db.AcademicYears.AsNoTracking().Select(x => new { x.AcademicYearID, x.DisplayYear }), "AcademicYearID", "DisplayYear"); ViewBag.ClassRefID = new SelectList(db.SchoolClasses.AsNoTracking().Select(x => new { x.ClassID, x.ClassName }), "ClassID", "ClassName"); StudentViewModel stuVMObj = new StudentViewModel(); //Create a empty row in Current year table/object //data is returned will form gets posted List<StudentCurrentYear> CyObj = new List<StudentCurrentYear> { new StudentCurrentYear { SchoolRefID=0, AcademicYearRefID=0, ClassRefID =0, StudentRefID =Guid.NewGuid(), Active = true } }; stuVMObj.StudentCurrentYear = CyObj; return View(stuVMObj); }
public async Task<ActionResult> Edit(StudentViewModel studentVM) { if (ModelState.IsValid) { Student studentDBC = Mapper.Map<Student>(studentVM); studentDBC.StudentCurrentYear[0].Active = true; foreach(var studCY in studentDBC.StudentCurrentYear) { db.StudentCurrentYears.Attach(studCY); db.Entry(studCY).State = EntityState.Modified; } db.Entry(studentDBC).State = EntityState.Modified; await db.SaveChangesAsync(); return RedirectToAction("Index"); } else { ModelState.AddModelError("", "Error: model state is not valid"); } ViewBag.SchoolRefID = new SelectList(db.Schools.AsNoTracking().Select(x => new { x.SchoolID, x.SchoolName }), "SchoolID", "SchoolName", studentVM.StudentCurrentYear[0].SchoolRefID); ViewBag.AcademicYearRefID = new SelectList(db.AcademicYears.AsNoTracking().Where(sch => sch.SchoolRefID == studentVM.StudentCurrentYear[0].SchoolRefID).Select(x => new { x.AcademicYearID, x.DisplayYear }), "AcademicYearID", "DisplayYear", studentVM.StudentCurrentYear[0].AcademicYearRefID); ViewBag.ClassRefID = new SelectList(db.SchoolClasses.AsNoTracking().Where(sch => sch.SchoolRefID == studentVM.StudentCurrentYear[0].SchoolRefID).Select(x => new { x.ClassID, x.ClassName }), "ClassID", "ClassName", studentVM.StudentCurrentYear[0].ClassRefID); return View(studentVM); }
public async Task<ActionResult> Create(StudentViewModel student) { //Create a transaction using (var dbosisTransaction = db.Database.BeginTransaction()) { try { if (ModelState.IsValid) { //user auto mapper to fill student object incluing // navigation object studentcurrentyear Student studentmap = Mapper.Map<Student>(student); studentmap.StudentID = Guid.NewGuid(); //The current is always true when create a student // for the first time studentmap.StudentCurrentYear[0].Active = true; // the school table/object has registration no // which needs to update for for every student // always store the last registration no given to' // a student var LastRegNo = db.Database.SqlQuery<int>("Select LastRegNo from Schools with (XLOCK) where SchoolID={0}", studentmap.StudentCurrentYear[0].SchoolRefID).FirstOrDefault<int>(); // increment the lastregno by one int NewRegNo = LastRegNo + 1; //Update database school table with the new latest regno db.Database.ExecuteSqlCommand("UPDATE Schools SET LastRegNo = {0} where schoolID= {1}", NewRegNo, studentmap.StudentCurrentYear[0].SchoolRefID); // assign new registration to student object Registration No property studentmap.RegistrationNo = NewRegNo; //Add student object to student db context db.Students.Add(studentmap); //User Task Parallel Library(TPL) to save changes in asynchronous(background) way await db.SaveChangesAsync(); //Commit the transaction dbosisTransaction.Commit(); //Return to student index page return RedirectToAction("Index"); } else { //if model is invalid the following will excuted //repoulate the dropdown's with values they had //before post ModelState.AddModelError("", "Error: model state is not valid"); ViewBag.SchoolRefID = new SelectList(db.Schools.AsNoTracking().Select(x => new { x.SchoolID, x.SchoolName }), "SchoolID", "SchoolName", student.SchoolRefID); ViewBag.AcademicYearRefID = new SelectList(db.AcademicYears.AsNoTracking().Select(x => new { x.AcademicYearID, x.DisplayYear }), "AcademicYearID", "DisplayYear", student.AcademicYearRefID); ViewBag.ClassRefID = new SelectList(db.SchoolClasses.AsNoTracking().Select(x => new { x.ClassID, x.ClassName }), "ClassID", "ClassName", student.ClassRefID); return View(student); } } catch (Exception e) { dbosisTransaction.Rollback(); ModelState.AddModelError("", e.InnerException); TempData["errormessage"] = e.Message; ViewBag.SchoolRefID = new SelectList(db.Schools.AsNoTracking().Select(x => new { x.SchoolID, x.SchoolName }), "SchoolID", "SchoolName", student.SchoolRefID); ViewBag.AcademicYearRefID = new SelectList(db.AcademicYears.AsNoTracking().Select(x => new { x.AcademicYearID, x.DisplayYear }), "AcademicYearID", "DisplayYear", student.AcademicYearRefID); ViewBag.ClassRefID = new SelectList(db.SchoolClasses.AsNoTracking().Select(x => new { x.ClassID, x.ClassName }), "ClassID", "ClassName", student.ClassRefID); return View(student); } } }
public async Task<ActionResult> Edit(StudentViewModel studentVM) { if (ModelState.IsValid) { if(await Task.Run(() => _service.saveAfterEdit(studentVM))) { return RedirectToAction("Index"); } else { ModelState.AddModelError("", "Error:returned from service class"); } } else { ModelState.AddModelError("", "Error: model state is not valid"); } var dbc = _service.getDBContext(); ViewBag.SchoolRefID = new SelectList(dbc.Schools.AsNoTracking().Select(x => new { x.SchoolID, x.SchoolName }), "SchoolID", "SchoolName", studentVM.StudentCurrentYear[0].SchoolRefID); ViewBag.AcademicYearRefID = new SelectList(dbc.AcademicYears.AsNoTracking().Where(sch => sch.SchoolRefID == studentVM.StudentCurrentYear[0].SchoolRefID).Select(x => new { x.AcademicYearID, x.DisplayYear }), "AcademicYearID", "DisplayYear", studentVM.StudentCurrentYear[0].AcademicYearRefID); ViewBag.ClassRefID = new SelectList(dbc.SchoolClasses.AsNoTracking().Where(sch => sch.SchoolRefID == studentVM.StudentCurrentYear[0].SchoolRefID).Select(x => new { x.ClassID, x.ClassName }), "ClassID", "ClassName", studentVM.StudentCurrentYear[0].ClassRefID); return View(studentVM); }
public async Task<ActionResult> Create(StudentViewModel StudentVM) { //Create a transaction if (ModelState.IsValid) { if (await Task.Run(() => _service.CreateStudent(StudentVM) == true)) { //Return to student index page return RedirectToAction("Index"); } } //if model is invalid the following will excuted //repoulate the dropdown's with values they had //efore post ModelState.AddModelError("", "Error: model state is not valid"); ViewBag.SchoolRefID = new SelectList(db.Schools.AsNoTracking().Select(x => new { x.SchoolID, x.SchoolName }), "SchoolID", "SchoolName", StudentVM.SchoolRefID); ViewBag.AcademicYearRefID = new SelectList(db.AcademicYears.AsNoTracking().Select(x => new { x.AcademicYearID, x.DisplayYear }), "AcademicYearID", "DisplayYear", StudentVM.AcademicYearRefID); ViewBag.ClassRefID = new SelectList(db.SchoolClasses.AsNoTracking().Select(x => new { x.ClassID, x.ClassName }), "ClassID", "ClassName", StudentVM.ClassRefID); return View(StudentVM); }
public bool saveAfterEdit(StudentViewModel StudentVM) { Student StudentModel = Mapper.Map<Student>(StudentVM); //StudentModel.StudentCurrentYear[1].Active = true; foreach (var studentCurrYear in StudentModel.StudentCurrentYear) { if(studentCurrYear.Active== true) { db.StudentCurrentYears.Attach(studentCurrYear); db.Entry(studentCurrYear).State = EntityState.Modified; } } db.Entry(StudentModel).State = EntityState.Modified; db.SaveChanges(); return true; }