Инструкция INSERT конфликтует с идентификатором ограничения FOREIGN KEY AspNetUsers(IdentityUser) в ASP.NET Core MVC.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Инструкция INSERT конфликтует с идентификатором ограничения FOREIGN KEY AspNetUsers(IdentityUser) в ASP.NET Core MVC.

Сообщение Anonymous »


Я создал панель регистрации для врача, пациента и администратора, когда я пытаюсь зарегистрировать или вставить данные, выдает такую ​​ошибку,

SqlException: инструкция INSERT конфликтует с ограничением FOREIGN KEY «FK_AspNetUsers_Departments_DepartmentId». Конфликт произошел в базе данных «Hospitaldb», таблица «dbo.Departments», столбец «Id»

Часть миграции:

migrationBuilder.CreateTable( имя: «Аспнетусерс», столбцы: таблица => новый { Id = table.Column(тип: «nvarchar(450)», значение NULL: false), Дискриминатор = table.Column(тип: «nvarchar(21)», maxLength: 21, обнуляемый: false), Имя пользователя = table.Column(тип: «nvarchar(256)», maxLength: 256, значение NULL: true), NormalizedUserName = table.Column(тип: «nvarchar(256)», maxLength: 256, значение NULL: true), Электронная почта = table.Column(тип: «nvarchar(256)», maxLength: 256, значение NULL: true), NormalizedEmail = table.Column(тип: «nvarchar(256)», maxLength: 256, значение NULL: true), EmailConfirmed = table.Column(тип: «бит», значение null: false), PasswordHash = table.Column(тип: «nvarchar(max)», значение NULL: true), SecurityStamp = table.Column(тип: «nvarchar(max)», значение NULL: true), ConcurrencyStamp = table.Column(тип: «nvarchar(max)», значение NULL: true), PhoneNumber = table.Column(тип: «nvarchar(max)», значение NULL: true), PhoneNumberConfirmed = table.Column(тип: «бит», значение null: false), TwoFactorEnabled = table.Column(тип: «бит», значение null: false), LockoutEnd = table.Column(тип: «datetimeoffset», значение NULL: true), LockoutEnabled = table.Column(тип: «бит», значение null: false), AccessFailedCount = table.Column(тип: «int», значение null: false), // Я добавил эту строку DepartmentId = table.Column(тип: «int», значение null: true) }, ограничения: таблица => { table.PrimaryKey("PK_AspNetUsers", x => x.Id); // Я добавил этот блок кода таблица.ForeignKey( имя: "FK_AspNetUsers_Departments_DepartmentId", столбец: x => x.DepartmentId, PrincipalTable: «Отделы», PrincipalColumn: «Идентификатор», onDelete: ReferentialAction.Cascade); }); } Класс модели отдела:

Отдел общественного класса { общественный ИНТ Id {получить; набор; } общедоступная строка Имя {get; набор; } общедоступная строка Описание {get; набор; } public ICollection Сотрудники {get; набор; } } DbInitializer, который наследуется от IDbInitializer:

public void Initialize() { пытаться { если (_context.Database.GetPendingMigrations().Count() > 0) { _context.Database.Migrate(); } } поймать (исключение) { бросать; } if (!_roleManager.RoleExistsAsync(WebsiteRoles.Website_Admin).GetAwaiter().GetResult()) { _roleManager.CreateAsync(новая IdentityRole(WebsiteRoles.Website_Admin)).GetAwaiter().GetResult(); _roleManager.CreateAsync(новая IdentityRole(WebsiteRoles.Website_Patient)).GetAwaiter().GetResult(); _roleManager.CreateAsync(новая IdentityRole(WebsiteRoles.Website_Doctor)).GetAwaiter().GetResult(); _userManager.CreateAsync(новый ApplicationUser { Имя пользователя = "XYZ", Электронная почта = "[email protected]" }, "XYZ@123").GetAwaiter().GetResult(); var Appuser = _context.ApplicationUsers.FirstOrDefault(x => x.Email == "[email protected]"); если (Appuser != ноль) { _userManager.AddToRoleAsync(Appuser, WebsiteRoles.Website_Admin).GetAwaiter().GetResult(); } } } Класс ApplicationUser:

публичный класс ApplicationUser: IdentityUser { общедоступная строка Имя {get; набор; } общественный Пол Пол { get; набор; } публичная строка Национальность {get; набор; } общедоступная строка Адрес {get; набор; } общественный DateTime DOB {получить; набор; } Специалист по общедоступной строке { get; набор; } общественный bool IsDoctor {получить; набор; } общественная строка PictureUrl {get; набор; } отдел государственного департамента { get; набор; } [NotMapped] общественный ICollection Назначения {get; набор; } [NotMapped] public ICollection Расчеты заработной платы {get; набор; } [NotMapped] общественный ICollection PatientReports {get; набор; } } Файл DoctorRegister.cs IdentityUser:

публичная асинхронная задача OnPostAsync (строка returnUrl = null) { returnUrl ??= Url.Content("~/"); Внешний вход = (ожидание _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); если (ModelState.IsValid) { вар пользователь = CreateUser(); ждут _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None); ждут _emailStore.SetEmailAsync(пользователь, Input.Email, CancellationToken.None); пользователь.Имя = Ввод.Имя; пользователь.Адрес = Вход.Адрес; user.Nationality = Input.Nationality; пользователь.DOB = Ввод.DOB; пользователь.Пол = Ввод.Пол; пользователь.IsDoctor = Input.IsDoctor; пользователь.Специалист = Вход.Специалист; ImageOpertaions изображение = новый ImageOpertaions (_env); строковое имя файла = image.ImageUpload(Input.PictureUrl); user.PictureUrl = имя файла; результат вар = ждут _userManager.CreateAsync(пользователь, Input.Password); если (результат.Успешно) { _logger.LogInformation("Пользователь создал новую учетную запись с паролем."); ждут _userManager.AddToRoleAsync(пользователь, WebsiteRoles.Website_Doctor); вар userId = ждут _userManager.GetUserIdAsync (пользователь); //код var = ожидание _userManager.GenerateEmailConfirmationTokenAsync(user); //код = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(код)); //var callbackUrl = Url.Page( // "/Учетная запись/ConfirmEmail", // обработчик страницы: ноль, // значения: new { area = "Identity", userId = userId, code = code, returnUrl = returnUrl }, // протокол: Request.Scheme); //ждем _emailSender.SendEmailAsync(Input.Email, «Подтвердите свой адрес электронной почты», // $"Подтвердите свою учетную запись, нажав здесь."); если (_userManager.Options.SignIn.RequireConfirmedAccount) { return RedirectToPage("RegisterConfirmation", новый {электронная почта = Input.Email, returnUrl = returnUrl}); } еще { ждут _signInManager.SignInAsync (пользователь, isPersistent: false); вернуть LocalRedirect (returnUrl); } } foreach (ошибка var в result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // Если мы зашли так далеко, что-то не удалось, переотобразите форму вернуть страницу(); } Метод CreateUser:

частный ApplicationUser CreateUser() { пытаться { return Activator.CreateInstance(); } ловить { throw new InvalidOperationException($"Невозможно создать экземпляр '{nameof(IdentityUser)}'. " + $"Убедитесь, что '{nameof(IdentityUser)}' не является абстрактным классом и имеет конструктор без параметров, или, альтернативно, " + $"переопределить страницу регистрации в /Areas/Identity/Pages/Account/Register.cshtml"); } } Когда я отлаживаю код, после этой строки выдается ошибка

var result = await _userManager.CreateAsync(user, Input.Password); Я пытаюсь вставить строку данных в базу данных, используя внешний ключ, но получаю сообщение об ошибке при отправке идентификатора ограничения FOREIGN KEY

В базе данных уже существует одна запись, которую я жестко запрограммировал
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»