在ASP.NET核心Web MVC应用程序中,如何在MySQL中创建标识表
在ASP.NET核心Web MVC应用程序中,我无法在MySQL中成功创建标识所需的表 复制步骤(在Visual Studio中):在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数据库的默认连接(下面的示例) 这就是错误发生的地方,
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