无法设置identityuser上的外键

ff29svar  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(304)

我正在尝试创建一个外键为 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; }
    }
}

生成迁移看起来不错,但是当我实际尝试运行数据库更新时,出现了“cannotaddforeign key contstraint”错误。
下面是它失败的sql语句:

ALTER TABLE `Notes` ADD CONSTRAINT `FK_Notes_AspNetUsers_CreatedByUserId` FOREIGN KEY (`CreatedByUserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE NO ACTION;

这将导致一条稍微详细一点的错误消息:“在引用的表中没有索引,其中引用的列显示为第一列。”
但是,当我看到 AspNetUsers table,我看得出来 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 table?

gkl3eglg

gkl3eglg1#

对我来说,问题是引用彼此的两个表没有使用相同的字符集,所以mysql拒绝设置外键约束。我想可能是我从mysqldump导入了初始db,但是本地db的默认值与输出到sql dump的值不匹配。

相关问题