为什么在Asp.Net Identity 2.0 PhoneNumber是[nvarchar](max)

时间:2014-09-19 11:57:51

标签: asp.net-mvc entity-framework optimization asp.net-identity

我在我的MVC 5项目中使用Asp.Net Identity 2.0。

为什么列PhoneNumber在SQL Server数据库表[nvarchar](max)中使用[dbo].[AspNetUsers]

我可以将其更改为[nvarchar](64),例如吗?

3 个答案:

答案 0 :(得分:7)

我创建了一个类ApplicationUser : IdentityUser,其中我使用属性PhoneNumber覆盖属性[MaxLength(64)]

public class ApplicationUser : IdentityUser
{
    [MaxLength(64)]
    public override string PhoneNumber { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }
}

答案 1 :(得分:5)

您应该能够使用ApplicationDbContext

中的modelBuilder指定自定义长度
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {

    }

    static ApplicationDbContext()
    {
        // Set the database intializer which is run once during application start
        // This seeds the database with admin user credentials and admin role
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Properties<string>()
        .Where(x => x.Name == "PhoneNumber")
        .Configure(c => c.HasMaxLength(64));
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

我测试了它,它的工作原理!

有关操作EF6映射的更多信息,请查看以下链接:

http://msdn.microsoft.com/en-us/data/jj819164#classes

答案 2 :(得分:0)

是的,您可以更改,只是限制nvarchar,如果您不想超过该数字,因为nvarchar的数据存储大小等于输入的实际数据长度的两倍+ 2个字节。 例如:如果输入5个字符串

,则最大或64不会影响大小