ASP.NET 身份:如何限制用户名长度



如何限制表中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中),因为索引用于有效地搜索。

相关内容

  • 没有找到相关文章

最新更新