如何限制表中UserName
字段的长度AspNetUsers
?
既不是:
public class ApplicationUser : IdentityUser
{
[Required, MaxLength(15)]
public string UserName { get; set; }
}
或者这个:
modelBuilder.Entity<ApplicationUser>().Property(x => x.UserName).HasMaxLength(15);
工程。
我需要这个,因为在nvarchar(max)
上设置Index
会给我以下错误消息:
表 'dbo' 中的"用户名"列。AspNetUsers'的类型是不能用作索引中的键列。
为了详细起见,我试图像这样设置索引:
public override void Up()
{
CreateIndex("dbo.AspNetUsers", "UserName", true, "IX_UserName");
}
public override void Down()
{
DropIndex("dbo.AspNetUsers", "IX_UserName");
}
在今天发布的最新版本中,这应该可以解决问题:
modelBuilder.Entity<ApplicationUser>().Property(x => x.UserName).HasMaxLength(15);
试试这个
public class ApplicationUser : IdentityUser
{
[Required, MaxLength(15)]
public override string UserName { get; set; }
}
很多时间已经过去了,但我认为有人可能仍然会发现它很有用。我遇到了同样的问题,并在这里找到了我的解决方案的线索。迁移机制忽略 MaxLength 属性,但可以手动添加更正:
public override void Up()
{
AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: false, maxLength: 15, storeType: "nvarchar"));
CreateIndex("dbo.AspNetUsers", "UserName");
}
public override void Down()
{
DropIndex("dbo.AspNetUsers", new[] { "UserName" });
AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: false, maxLength: 256, storeType: "nvarchar"));
}
update-database
后,字段被缩短,按用户名搜索的SQL查询运行得更快(至少在我使用的mySQL中),因为索引用于有效地搜索。