【问题标题】:Specified key was too long; max key length is 767 bytes - ASPNet Identity MySQL指定的密钥太长;最大密钥长度为 767 字节 - ASPNet Identity MySQL
【发布时间】:2017-02-01 05:10:54
【问题描述】:

我创建了一个带有 Identity 和 MySQL 的 MVC 应用程序。我已经创建了我的实体,但是当我创建用户表时它失败并出现标题中指定的错误。 我搜索了一下,有人说UserNameNameEmail 属性太长了。我已经厌倦了像下面的示例那样在这些列上设置最大长度,但我无法让它工作。

身份模型:

 [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("CaptureDBContext", throwIfV1Schema: false)
        {
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<ApplicationUser>().Property(u => u.UserName).IsUnicode(false);
            modelBuilder.Entity<ApplicationUser>().Property(u => u.Email).IsUnicode(false);
            modelBuilder.Entity<IdentityRole>().Property(r => r.Name).HasMaxLength(255);
        }
    }

有人可以帮忙吗?

我可以让它与标准实体一起使用,但不能与身份表一起使用

这个问题不是重复的,因为链接中发布的教程已有 2 年历史,当时 MySQL.Data 版本不支持 EF。我正在使用的那个。

【问题讨论】:

    标签: c# mysql asp.net-mvc asp.net-identity


    【解决方案1】:

    我自己找到了答案。

    问题与用户表中的用户名和电子邮件有关。然后是角色表中的名称。

    我在 IdentityModel 类中为所有三个添加了最大长度。这里是:

        [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
        public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
        {
            public ApplicationDbContext()
                : base("CaptureDBContext", throwIfV1Schema: false)
            {
            }
    
            public static ApplicationDbContext Create()
            {
                return new ApplicationDbContext();
            }
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Entity<ApplicationUser>().Property(u => u.UserName).HasMaxLength(255);
                modelBuilder.Entity<ApplicationUser>().Property(u => u.Email).HasMaxLength(255);
                modelBuilder.Entity<IdentityRole>().Property(r => r.Name).HasMaxLength(255);
            }
        }
    }
    

    哦,添加DbConfigurationType 为 MySQL 可以解决迁移历史表问题(我已经知道了)。

    倒霉的缪斯迷

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2016-04-15
      • 2012-05-31
      • 2017-11-23
      • 2015-06-22
      • 2013-12-21
      • 2015-06-29
      • 2020-09-10
      • 2014-08-17
      相关资源
      最近更新 更多