public async Task <IActionResult> Register(RegisterViewModel registerViewModel) { if (ModelState.IsValid) { try { await using var transaction = dbContext.Database.BeginTransaction(); var salt = HashPassword.CreateSalt(); var hash = HashPassword.GenerateSaltedHash(Encoding.UTF8.GetBytes(registerViewModel.Password), salt); var user = new User { UserLogin = registerViewModel.Login, UserSalt = Convert.ToBase64String(salt), UserHash = Convert.ToBase64String(hash), UserType = "passenger" }; await dbContext.User.AddAsync(user); await dbContext.SaveChangesAsync(); var passenger = new Passenger { IdUser = user.IdUser, PassengerFullName = registerViewModel.FullName, PassengerBirthday = registerViewModel.Birthday, IdPassengerPassportType = registerViewModel.IdPassportType, PassengerPassport = registerViewModel.PassportData }; await dbContext.Passenger.AddAsync(passenger); await dbContext.SaveChangesAsync(); transaction.Commit(); await Authenticate(user); return(RedirectToAction("Index", "Home")); } catch { return(NotFound()); } } ViewBag.PassportType = new SelectList(dbContext.PassportType.ToList(), "IdPassportType", "Passport"); return(View(registerViewModel)); }