如何在ASP.net Identity 3.0中更改表名?
我已经搜索过了,但没有找到任何可行的Identity 3.0
以及这个如何更改asp.net标识3(vnext)使用的表名?不起作用。
您可以通过在DbContext
:的OnModelCreating
上使用扩展方法ToTable("TableName")
更改实体映射来轻松完成此操作
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<User>().ToTable("Users"); // Your custom IdentityUser class
builder.Entity<IdentityUserLogin<string>>().ToTable("UserLogins");
builder.Entity<IdentityUserToken<string>>().ToTable("UserTokens");
builder.Entity<IdentityUserClaim<string>>().ToTable("UserClaims");
builder.Entity<IdentityUserRole<string>>().ToTable("UserRoles");
builder.Entity<IdentityRoleClaim<string>>().ToTable("RoleClaims");
builder.Entity<IdentityRole>().ToTable("Roles");
}
这里唯一的问题是记住使用具有标识符类型的泛型(字符串是AspNetCore.上的默认值)
只是为了文档的目的,对于那些来这篇关于未来几年的文章的人,(像我XD),问题的答案:
如何更改.NET CORE中默认的ASP.NET标识表名称?
可以作为这个解决
//Repeat with each table
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable(name:"Users");
entity.Property(e => e.Id).HasColumnName("UserId");
});
或者可以像这个一样解决
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");
但你可以简单地用Alexandru Bucur在他的博客上给出的方法来解释,并在netcore 2.2 上测试
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var table = entityType.Relational().TableName;
if (table.StartsWith("AspNet"))
{
entityType.Relational().TableName = table.Substring(6);
}
};
但这并不是netcore>2.2上的长期支持,所以,我需要修复它,这是netcore>2.2上的功能方式
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var tableName = entityType.GetTableName();
if (tableName.StartsWith("AspNet"))
{
entityType.SetTableName(tableName.Substring(6));
}
}
选择你喜欢的并享受它,HappyCoding