当我使用这个命令时:
$ dotnet ef database update
我收到这个错误:
Specified key was too long; max key length is 3072 bytes
导致这个错误的表是微软内置的用户管理表:
CREATE TABLE `AspNetUserLogins`
(
`LoginProvider` varchar(767) NOT NULL,
`ProviderKey` varchar(767) NOT NULL,
`ProviderDisplayName` text NULL,
`UserId` varchar(767) NOT NULL,
PRIMARY KEY (`LoginProvider`, `ProviderKey`),
CONSTRAINT `FK_AspNetUserLogins_AspNetUsers_UserId`
FOREIGN KEY (`UserId`) REFERENCES `AspNetUsers` (`Id`)
ON DELETE CASCADE
);
我试图将此添加到 OnModelCreating
:
modelBuilder.Entity<Utilisateurs>(entity => entity.Property(m => m.NormalizedEmail).HasMaxLength(200));
modelBuilder.Entity<Utilisateurs>(entity => entity.Property(m => m.NormalizedUserName).HasMaxLength(200));
modelBuilder.Entity<IdentityRole>(entity => entity.Property(m => m.NormalizedName).HasMaxLength(200));
modelBuilder.Entity<IdentityUserLogin<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(200));
modelBuilder.Entity<IdentityUserRole<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(200));
modelBuilder.Entity<IdentityUserRole<string>>(entity => entity.Property(m => m.RoleId).HasMaxLength(200));
modelBuilder.Entity<IdentityUserToken<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(200));
modelBuilder.Entity<IdentityUserClaim<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(200));
modelBuilder.Entity<IdentityRoleClaim<string>>(entity => entity.Property(m => m.RoleId).HasMaxLength(200));
但它不再起作用了。
谢谢你的帮助
** 编辑 **
我也试过:
modelBuilder.Entity<IdentityUserLogin<string>>(entity => entity.Property(m => m.LoginProvider).HasMaxLength(200));
modelBuilder.Entity<IdentityUserLogin<string>>(entity => entity.Property(m => m.ProviderKey).HasMaxLength(200));
最佳答案
我使用的是官方 MySql 提供程序 MySql.Data.EntityFrameworkCore
,它处于预发布状态并且在迁移方面存在一些问题。然后我更改为 Pomelo.EntityFrameworkCore.MySql
并更新了数据库,没有任何错误。
关于Mysql Entity Framework 问题 - 指定的键太长;最大 key 长度为 3072 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48388856/