我使用的是Visual Studio 2013的发布版本(RTM,不是RC)(从MSDN 2013-10-18下载),因此是最新的(RTM) AspNet.Identity版本。当我创建一个新的web项目时,我选择“个人用户帐户”进行身份验证。这将创建以下表:
AspNetRoles AspNetUserClaims AspNetUserLogins AspNetUserRoles AspNetUsers
当我注册一个新用户(使用默认模板),这些表(上面列出的)被创建和AspNetUsers表有一个记录插入其中:
Id 用户名 PasswordHash SecurityStamp 鉴频器
此外,通过向类“ApplicationUser”添加公共属性,我已经成功地向AspNetUsers表添加了额外的字段,如“FirstName”,“LastName”,“PhoneNumber”等。
这是我的问题。是否有一种方法可以更改上述表的名称(当它们第一次创建时),或者它们总是像我上面列出的那样以AspNet前缀命名?如果表名可以以不同的方式命名,请解释如何命名。
——更新——
我执行了@Hao Kung的解决方案。它确实创建了一个新表(例如,我称它为MyUsers),但它仍然创建了AspNetUsers表。目标是将“AspNetUsers”表替换为“MyUsers”表。参见下面的代码和创建的表的数据库映像。
实际上,我想用我自己的名字替换每个AspNet表…例如,MyRoles, MyUserClaims, MyUserLogins, MyUserRoles和MyUsers。
我如何完成这一任务而最终只得到一组表呢?
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string PhonePrimary { get; set; }
public string PhoneSecondary { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(): base("DefaultConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
}
}
——更新答案——
多亏了郝坤和彼得·斯图林斯基。这解决了我的问题……
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
}