¿Cómo hacer la gestión de sesiones en identidad aspnet?

estoy usandoIdentidad Asp.net paraIniciar sesión, Registrarse, Olvidé mi contraseña etc. y el código fuente se toma de este enlace a continuación:

http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset

http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity.

Ahora tengo 1 tabla que es UserMaster y durante el registro solicito los siguientes campos:Nombre completo, ID de correo electrónico, Contraseña, Número de contacto, Género.

Mi UserMaster contiene los siguientes campos:Id, FullName, EmailId, ContactNumber, Gender

Ahora, cuando el usuario envíe el formulario de registro, este nombre completo, correo electrónico, número de contacto y género se guardarán enUserMaster junto conCorreo electrónico, la contraseña se guardará en AspnetUser.

Mi método de registro es el mismo que se proporciona en los 2 enlaces anteriores.

Aquí puedes notar que haysin relación entre mi UserMaster y AspnetUser así que durante el inicio de sesión, cuando el usuario ingrese su ID de correo electrónico para iniciar sesión, usaré este métodoawait SignInManager.PasswordSignInAsync para verificar el usuario y si este método devuelve el éxito, lo que haré es usar esta identificación de correo electrónico y verificar este correo electrónico en mi UserMaster y, si se encuentra una coincidencia, buscaré ese UserId de UserMaster y lo almacenaré en la sesión y usaré mi aplicación en mi método de inicio de sesión como a continuación:

 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
            {
                if (!ModelState.IsValid)
                {
                    return View(model);
                }

                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, change to shouldLockout: true
                var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
                switch (result)
                {
                    case SignInStatus.Success:
                  using (var context = new MyEntities())
                        {
                            var fetchUSerId = context.UserMaster.Where(t => t.Email == model.Email).Select(t=>t.UserId).SingleOrDefault();
                            Session["UserId"] = fetchUSerId;
                        }
                        return RedirectToLocal(returnUrl);
                    case SignInStatus.LockedOut:
                        return View("Lockout");
                    case SignInStatus.RequiresVerification:
                        return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                    case SignInStatus.Failure:
                    default:
                        ModelState.AddModelError("", "Invalid login attempt.");
                        return View(model);
                }
            }

Estoy hablando de esto en mi método de inicio de sesión:

 case SignInStatus.Success:
                      using (var context = new MyEntities())
                            {
                                var fetchUSerId = context.UserMaster.Where(t => t.Email == model.Email).Select(t=>t.UserId).SingleOrDefault();
                                Session["UserId"] = fetchUSerId;
                            }

¿Es esta una forma adecuada o aún mejor? Quiero almacenar todo el objeto de usuario en lugar de solo almacenar el Id. De usuario.

Entonces, ¿alguien puede decirme cómo hacer esto con identidad de aspnet?

Respuestas a la pregunta(3)

Su respuesta a la pregunta