指定密钥太长;最大密钥长度为767字节 - ASPNet Identity MySQL

时间:2016-09-23 10:58:30

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

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

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).IsUnicode(false);
            modelBuilder.Entity<ApplicationUser>().Property(u => u.Email).IsUnicode(false);
            modelBuilder.Entity<IdentityRole>().Property(r => r.Name).HasMaxLength(255);
        }
    }

有人可以帮忙吗?

我可以使用标准实体但不能使用标识表

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

1 个答案:

答案 0 :(得分:5)

我自己找到了答案。

问题与User表中的UserName和Email有关。然后是Role表中的Name。

我在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,可以解决迁移历史表问题(我已经知道了)。

不幸的是博物馆