public ActionResult Create(Department department)
        {
            if (ModelState.IsValid)
            {
                this._db.Departments.Add(department);
                this._db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.PersonID = new SelectList(this._db.Instructors, "PersonID", "FullName", department.PersonID);
            return View(department);
        }
 public ActionResult Edit(Department department)
 {
     try
     {
         if (ModelState.IsValid)
         {
             ValidateOneAdministratorAssignmentPerInstructor(department);
         }
         if (ModelState.IsValid)
         {
             _db.Entry(department).State = EntityState.Modified;
             _db.SaveChanges();
             return RedirectToAction("Index");
         }
     }
     catch (DbUpdateConcurrencyException ex)
     {
         var entry = ex.Entries.Single();
         var databaseValues = (Department)entry.GetDatabaseValues().ToObject();
         var clientValues = (Department)entry.Entity;
         if (databaseValues.Name != clientValues.Name)
         {
             ModelState.AddModelError("Name", Resource.CurrentValue + databaseValues.Name);
         }
         if (databaseValues.Budget != clientValues.Budget)
         {
             ModelState.AddModelError("Budget", Resource.CurrentValue + databaseValues.Budget);
         }
         if (databaseValues.StartDate != clientValues.StartDate)
         {
             ModelState.AddModelError("StartDate", Resource.CurrentValue + databaseValues.StartDate);
         }
         if (databaseValues.PersonID != clientValues.PersonID)
         {
             ModelState.AddModelError("PersonID", Resource.CurrentValue
                 + this._db.Instructors.Find(databaseValues.PersonID).FullName);
         }
         ModelState.AddModelError(string.Empty, Resource.EditConcurrencyError);
         department.TimeStamp = databaseValues.TimeStamp;
     }
     catch (DataException)
     {
         //Log the error (add a variable name after Exception)
         ModelState.AddModelError(string.Empty, Resource.SaveError);
     }
     ViewBag.PersonID = new SelectList(this._db.Instructors, "PersonID", "FullName", department.PersonID);
     return View(department);
 }
 private void ValidateOneAdministratorAssignmentPerInstructor(Department department)
 {
     if (department.PersonID == null) return;
     var duplicateDepartment =
         _db.Departments.Include("Administrator").Where(d => d.PersonID == department.PersonID).AsNoTracking().
             FirstOrDefault();
     if (duplicateDepartment == null || duplicateDepartment.DepartmentID == department.DepartmentID) return;
     var errorMessage = string.Format(
         "Instructor {0} {1} is already administrator of the {2} department.",
         duplicateDepartment.Administrator.FirstMiddleName,
         duplicateDepartment.Administrator.LastName,
         duplicateDepartment.Name);
     ModelState.AddModelError(string.Empty, errorMessage);
 }
 public ActionResult DeleteConfirmed(Department department)
 {
     try
     {
         this._db.Entry(department).State = EntityState.Deleted;
         this._db.SaveChanges();
         return RedirectToAction("Index");
     }
     catch (DbUpdateConcurrencyException)
     {
         return RedirectToAction("Delete",
             new System.Web.Routing.RouteValueDictionary { { "concurrencyError", true } });
     }
     catch (DataException)
     {
         //Log the error (add a variable name after Exception)
         ModelState.AddModelError(string.Empty, Resource.SaveError);
         return View(department);
     }
 }