在ASP.NET核心Web MVC应用程序中,如何在MySQL中创建标识表

在ASP.NET核心Web MVC应用程序中,如何在MySQL中创建标识表,mysql,entity-framework,asp.net-core-mvc,asp.net-identity,Mysql,Entity Framework,Asp.net Core Mvc,Asp.net Identity,在ASP.NET核心Web MVC应用程序中,我无法在MySQL中成功创建标识所需的表 复制步骤(在Visual Studio中): 文件->新解决方案->Web应用程序(模型视图控制器) 身份验证->个人身份验证(应用程序内) 键入解决方案名称 管理Nuget软件包->安装MySql.Data.EntityFrameworkCore 卸载SQLLite包 在Startup.cs中,添加: 在appsettings.json中,设置MySQL数据库的默认连接(下面的示例) 这就是错误发生的地方,

在ASP.NET核心Web MVC应用程序中,我无法在MySQL中成功创建标识所需的表

复制步骤(在Visual Studio中):

  • 文件->新解决方案->Web应用程序(模型视图控制器)
  • 身份验证->个人身份验证(应用程序内)
  • 键入解决方案名称
  • 管理Nuget软件包->安装MySql.Data.EntityFrameworkCore
  • 卸载SQLLite包
  • 在Startup.cs中,添加:
  • 在appsettings.json中,设置MySQL数据库的默认连接(下面的示例)
  • 这就是错误发生的地方,因为您最初使用SQLite生成DbContextModelSnapshot,您必须删除它,然后使用以下命令为MySQL重新生成它(我相信):
  • 然后,当然,使用以下内容更新数据库:

    dotnet ef database update
    
    但是,我们得到以下错误:

    CREATE TABLE `AspNetUserRoles` (
       `UserId` varchar(767) NOT NULL,
       `RoleId` varchar(767) NOT NULL,
       PRIMARY KEY (`UserId`, `RoleId`),
       CONSTRAINT `FK_AspNetUserRoles_AspNetRoles_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `AspNetRoles` (`Id`) ON DELETE CASCADE,
       CONSTRAINT `FK_AspNetUserRoles_AspNetUsers_UserId` FOREIGN KEY (`UserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE CASCADE
    );
    
    MySql.Data.MySqlClient.MySqlException (0x80004005): Specified key was too long; max key length is 3072 bytes
    
    这是因为快照生成的UserId的varchar长度为767,RoleId的varchar长度为767。在MySQL中,每个字符(UTF8)相当于3个字节。因此1534*3>3072字节。但是,标识只要求这些列的长度为


    因此,我的问题是:我们如何让迁移反映出所需的更改?

    检查您的MySQL提供程序,无论您是否使用
    MySQL.Data.EntityFrameworkCore
    ?如果您正在使用此软件包,可能此软件包在迁移方面有一些问题,请尝试更改为
    Pomelo.EntityFrameworkCore.MySql
    并更新数据库。此外,还可以检查线程:,并尝试使用HasMaxLength()或MaxLength()方法来限制属性长度。
    dotnet ef migrations add CreateIdentitySchema -o Data\Migrations
    
    dotnet ef database update
    
    CREATE TABLE `AspNetUserRoles` (
       `UserId` varchar(767) NOT NULL,
       `RoleId` varchar(767) NOT NULL,
       PRIMARY KEY (`UserId`, `RoleId`),
       CONSTRAINT `FK_AspNetUserRoles_AspNetRoles_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `AspNetRoles` (`Id`) ON DELETE CASCADE,
       CONSTRAINT `FK_AspNetUserRoles_AspNetUsers_UserId` FOREIGN KEY (`UserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE CASCADE
    );
    
    MySql.Data.MySqlClient.MySqlException (0x80004005): Specified key was too long; max key length is 3072 bytes