Кажется, что столбцы, которые вы добавили в таблицу AspNetUsers, включают в себя внешний ключ для Department_Department_Id.Я полагаю, что проблема заключается в том, что вы добавляете пользователя - но код добавления не задает значение Department_Id этого пользователя - поэтому фактически он добавляет ноль для Department_Id, а ключи не могут быть нулевыми.Чтобы это исправить - создайте пользовательский класс MyUser, производный от ApplicationUser, включая Department_Id и любые другие релевантные столбцы, и используйте этот производный класс для создания нового пользователя.Затем назначьте DepartmentId перед вызовом Create.
Я сделал это некоторое время назад, возможно, придется Google это, поскольку есть примеры того, как добавить столбцы в определенные таблицы AspNet.Я считаю, что я также обновил сценарии, используемые проектом для создания таблиц, с новыми определенными в них столбцами, поэтому при запуске без базы данных создается новый файл с правильной конфигурацией.Исходя из вашего текста, вы, возможно, уже сделали это ...
Обновление - (я могу только добавить здесь, нужно больше повторений, прежде чем я смогу добавлять комментарии или отвечать на них).
Подумал, что вы могли бы Google это -Я сделал.Вы не прокомментировали, добавили ли вы столбцы в модель AspNetUsers или создали производный класс, как я уже упоминал.Другие ответили на то же, что и я, - вы не можете создать экземпляр нового пользователя, не назначив ему сначала DepartmentId, - и не можете сделать это сначала, так как сначала вам нужен UserId - так что это должно быть сделано одновременно, как я.
Вот несколько ссылок, которые правильно добавляют столбцы в AspNetUser:
Просмотрите эти ссылки и посмотрите, насколько это просто.Вот краткая идея - не сделано в VS, извините - не проверено.но только для того, чтобы дать вам приблизительное представление ... У меня нет доступа к проекту, для которого я это делал в прошлом году, поэтому не могу дать быстрые точные ответы.
public class ApplicationUser : IdentityUser
{
// Because it is derived, all existing AspNetUser columns are inherited
// just need to add your new columns
public int DepartmentId { get; set; }
}
// model used for login page - with validation within page for items
public class LoginViewModel()
{
public string username { get; set; }
public string password { get; set; }
public List<SelectListItem> DepartmentList {
get {return new List<SelectListItem>() {
new SelectListItem() {Text = "Department A", Value = "1"},
new SelectListItem() {Text = "Department B", Value = "2"},
new SelectListItem() {Text = "Department C", Value = "3"}
};
}
private int selectedDepartment {
return DepartmentList.SelectedValue != null ?
Convert.Int32(DepartmentList.SelectedValue) : -1;
}
}
на вашей веб-странице (вы не сказали, что используете asp.net/mvc/other) - они должны выбрать, в какой отдел тоже войти, возможно, выпадающий список со значениями вроде
Html.DropDownFor(x => x.SelectedItem, Model.DepartmentList)
// then something like
public async Task<ActionResult> Login(LoginViewModel lmodel, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(lmodel);
}
ApplicationUser user = new ApplicationUser() {
UserName = lmodel.username,
Password = lmodel.password,
//... other AspNetUser values assigned?
//...,
Department_Id = lmodel.selectedDepartment
}
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded) {
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
}