【问题标题】:ASP.NET-Identity: how to limit UserName length?ASP.NET-Identity:如何限制用户名长度?
【发布时间】:2014-03-25 09:42:45
【问题描述】:

如何限制AspNetUsers表中UserName字段的长度?

这都不是:

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' 中的列 'UserName' 的类型是 不能用作索引中的键列。

为了冗长,我试图像这样设置索引:

public override void Up()
{
    CreateIndex("dbo.AspNetUsers", "UserName", true, "IX_UserName");
}
        
public override void Down()
{
    DropIndex("dbo.AspNetUsers", "IX_UserName");
}

【问题讨论】:

    标签: entity-framework entity-framework-6 ef-code-first asp.net-identity


    【解决方案1】:

    在今天发布的最新版本中,这应该可以解决问题:

    modelBuilder.Entity<ApplicationUser>().Property(x => x.UserName).HasMaxLength(15);

    【讨论】:

    • 我们把这个放在哪里?
    • 嗨,你可以把它放在OnModelCreating() 方法中,像这样:protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<ApplicationUser>().Property(x => x.UserName).HasMaxLength(15); }
    【解决方案2】:

    试试这个

    public class ApplicationUser : IdentityUser
    {
        [Required, MaxLength(15)]
        public override string UserName { get; set; }
    
    }
    

    【讨论】:

    • 没用,这是Up() 包含的内容:AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: false));
    • @Yustme 进行更改后您是否重新搭建了迁移支架?
    • 是的,Add-Migration test 给了我粘贴的Up()。之后,Update-Database。走到桌边,刷新了一下,还是看到了nvarchar(max)
    【解决方案3】:

    很多时间过去了,但我想有人可能仍然觉得它有用。我遇到了同样的问题,并在这里找到了我的解决方案的线索。 迁移机制忽略 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 之后,字段被缩短并且通过 UserName 搜索的 SQL 查询运行得更快(至少在我使用的 mySQL 中),因为索引用于高效搜索。

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 2018-01-11
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多