Я пытаюсь создать новую модель с внешним ключом для IdentityUser
, используя .NET Core 2.1 и Entity Framework Core (при поддержке MySQL), используя подход кода в первую очередь.Я создал модель, которая выглядит следующим образом:
using System;
using Microsoft.AspNetCore.Identity;
namespace Models
{
public class Note
{
public int NoteId { get; set; }
public string NoteText { get; set; }
public string CreatedByUserId { get; set; }
public virtual IdentityUser CreatedByUser { get; set; }
}
}
Генерация миграции выглядит хорошо, но когда я на самом деле пытаюсь запустить обновление базы данных, я получаю «Невозможно добавить consttraint внешнего ключа» ошибка.
Вот оператор SQL, на котором он не выполняется:
ALTER TABLE `Notes` ADD CONSTRAINT `FK_Notes_AspNetUsers_CreatedByUserId` FOREIGN KEY (`CreatedByUserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE NO ACTION;
Это приводит к чуть более подробному сообщению об ошибке: "В указанной таблице нет индексагде указанные столбцы отображаются как первые столбцы. "
Однако, когда я смотрю на индексы в таблице AspNetUsers
, я вижу, что Id
- это первичный ключ, который должен бытьиндексируются.Вот инструкция create для таблицы:
CREATE TABLE aspnetusers
(
Id VARCHAR(127) NOT NULL
PRIMARY KEY,
AccessFailedCount INT NOT NULL,
ConcurrencyStamp LONGTEXT NULL,
Email VARCHAR(256) NULL,
EmailConfirmed BIT NOT NULL,
LockoutEnabled BIT NOT NULL,
LockoutEnd DATETIME(6) NULL,
NormalizedEmail VARCHAR(256) NULL,
NormalizedUserName VARCHAR(256) NULL,
PasswordHash LONGTEXT NULL,
PhoneNumber LONGTEXT NULL,
PhoneNumberConfirmed BIT NOT NULL,
SecurityStamp LONGTEXT NULL,
TwoFactorEnabled BIT NOT NULL,
UserName VARCHAR(256) NULL,
CONSTRAINT UserNameIndex
UNIQUE (NormalizedUserName)
)
ENGINE = InnoDB
CHARSET = latin1;
CREATE INDEX EmailIndex
ON aspnetusers (NormalizedEmail);
Я также попытался использовать NormalizedUserName
и NormalizedEmail
вместо Id
, поскольку они оба выглядят как проиндексированные поля, которые отображаются как единственное полев соответствующих индексах, но я получаю одно и то же сообщение об ошибке для всех из них.
Как мне настроить внешний ключ для таблицы IdentityUser
?