我用Identity和MySQL创建了一个MVC应用程序。我创建了我的实体,但是当我创建用户表时,它失败并且标题中指定了错误。
我搜索过,人们说UserName
,Name
和Email
属性太长了。我已经厌倦了在这些列上设置最大长度,如下面的示例,但我还没有能够让它工作。
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。我正在使用的那个。
答案 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,可以解决迁移历史表问题(我已经知道了)。
不幸的是博物馆