Я делаю многостраничную регистрацию с сеансом и добавляю в базу данных после того, как мои действия выглядят как
public IActionResult Register(RegisterViewModel registerViewModel)
{
if (ModelState.IsValid)
{
if (!_context.users.Any(u => u.Email == registerViewModel.User.Email))
{
User user = new User
{
firstName = registerViewModel.User.firstName,
...
};
HttpContext.Session.SetString("SessionUser", Newtonsoft.Json.JsonConvert.SerializeObject(user));
registerViewModel.gyms = _context.gyms.ToList();
return View("~/Views/Account/Register2.cshtml", registerViewModel);
}
ModelState.AddModelError("Email", "This Email is taken");
}
return View(registerViewModel);
}
Он получает данные из формы, затем сохраняет их в сеансе в формате json отправляет его на 2-й и так далее:
[HttpPost]
public IActionResult Register2(RegisterViewModel registerViewModel)
{
if (registerViewModel.gym != null)
{
User user = JsonConvert.DeserializeObject<User>(HttpContext.Session.GetString("SessionUser"));
user.gym = _context.gyms.Find(registerViewModel.gym.gymID);
....
HttpContext.Session.SetString("SessionUser", JsonConvert.SerializeObject(user));
RegisterViewModel model = new RegisterViewModel()
{
User = user,
gym = user.gym
};
return View("~/Views/Account/Register3.cshtml", model);
}
}
, и если я делаю context.Add(user);
и сохраняю изменения здесь, он работает нормально, но я получаю к 3-й части, которая
[HttpPost]
public IActionResult Register3(RegisterViewModel registerViewModel)
{
if (registerViewModel.User != null)
{
User user = JsonConvert.DeserializeObject<User>(HttpContext.Session.GetString("SessionUser"));
...
user.Token = Guid.NewGuid().ToString();
_context.Add(user);
_context.SaveChanges();
Response.Cookies.Append("token", user.Token, new CookieOptions
{
Expires = DateTime.Now.AddYears(1),
HttpOnly = true
});
return RedirectToAction("Login", "Account");
}
}
Я получаю сообщение об ошибке
SqlException: Невозможно вставить явное значение для столбца идентификации в спортивных залах таблицы, когда для IDENTITY_INSERT задано значение OFF, спортивные залы - это спортивные залы DbSet.
Я нашел способ избежать этой ошибки: добавить пользователя в базу данных на Register2 и снова обновить его на Register3, но из-за работ, которые вызывают проблему с добавлением пользователя до завершения регистрации Я читал о других подобных вопросах с этой ошибкой, это вызывает эту ошибку, когда gymID в добавлен в базу данных, но не может найти корреляцию.
Моя модель пользователя такая:
[Key]
[Required]
public int UserID { get; set; }
[Required]
[MaxLength(100)]
public String firstName { get; set; }
....
public Gym gym { get; set; }