//Add user with his role
 public void AddUserWithRole(string role,int id, Admin admin,Teacher teacher,Student student)
 {
     admin.userId = teacher.UserId = student.userId = id;
     switch(role)
     {
         case "SchoolAdmin": AddAdmin(admin);
             break;
         case "Teacher": AddTeacher(teacher);
             break;
         case "Student": AddStudent(student);
             break;
     }
 }
 //add teacher
 public void AddTeacher(Teacher teacher)
 {
     teacherDb.DbSet.Add(teacher);
     teacherDb.SaveChanges();
 }
 public ActionResult Register(User user,string role, Admin admin,Teacher teacher,Student student)
 {
     // Attempt to register the user
         MembershipCreateStatus createStatus;
         Membership.CreateUser(user.userName, user.password, user.email, null, null, true, null, out createStatus);
         if (createStatus == MembershipCreateStatus.Success)
         {
             //add to user database
             db.dbSet.Add(user);
             db.SaveChanges();
             //add role
             Roles.AddUserToRole(user.userName, role);
             //add to our tables
             int id = GetUserIdByUsername(user.userName);
             AddUserWithRole(role,id,admin, teacher, student);
             FormsAuthentication.SetAuthCookie(user.userName, false /* createPersistentCookie */);
             return RedirectToAction("Index");
         }
         else
         {
             ModelState.AddModelError("", ErrorCodeToString(createStatus));
         }
         return RedirectToAction("Index");
 }