我在我的MVC 5项目中使用Asp.Net Identity 2.0。
为什么列PhoneNumber
在SQL Server数据库表[nvarchar](max)
中使用[dbo].[AspNetUsers]
?
我可以将其更改为[nvarchar](64)
,例如吗?
答案 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映射的更多信息,请查看以下链接:
答案 2 :(得分:0)
是的,您可以更改,只是限制nvarchar,如果您不想超过该数字,因为nvarchar的数据存储大小等于输入的实际数据长度的两倍+ 2个字节。 例如:如果输入5个字符串
,则最大或64不会影响大小