【问题标题】:Mysql Entity Framework issue - Specified key was too long; max key length is 3072 bytesMysql Entity Framework 问题 - 指定的键太长;最大密钥长度为 3072 字节
【发布时间】:2018-01-22 19:23:19
【问题描述】:

当我使用这个命令时:

$ dotnet ef database update

我收到此错误:

指定的密钥太长;最大密钥长度为 3072 字节

导致此错误的表是用于用户管理的内置 Microsoft 表:

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));

【问题讨论】:

  • 据我所知,您需要限制LoginProviderProviderKey 实体的IdentityUserLogin&lt;string&gt; 属性的最大长度
  • 谢谢,但是怎么做?
  • 类似于您在 OnModelCreating 中为其他属性所做的操作 - 例如modelBuilder.Entity&lt;IdentityUserLogin&lt;string&gt;&gt;(entity =&gt; entity.Property(m =&gt; m.LoginProvider).HasMaxLength(760); ProviderKey 相同。
  • 我试过(见我的编辑)但它不起作用
  • 您是否重新生成了迁移?还要确保您的代码在base.OnModelCreating 调用之后。

标签: mysql entity-framework asp.net-core-mvc entity-framework-core asp.net-core-2.0


【解决方案1】:

我使用了官方的 MySql 提供程序MySql.Data.EntityFrameworkCore,它处于预发布状态并且在迁移时遇到了一些问题。然后我更改为Pomelo.EntityFrameworkCore.MySql 并更新数据库没有任何错误。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 1970-01-01
      • 2019-03-21
      • 2018-06-09
      • 2011-03-30
      • 2016-10-04
      • 2011-06-25
      • 2014-08-17
      • 2020-07-26
      相关资源
      最近更新 更多