admin 发表于 2023-12-10 22:40:40

【C#】修改 .NET Identity 中的表名和字段名

1、修改表名:
在使用 Entity Framework 进行数据库迁移时,默认的表名是通过 OnModelCreating 方法中的 Fluent API 进行配置的。您可以通过继承 IdentityDbContext 类,并重写 OnModelCreating 方法来修改表名。例如,假设要将用户表(AspNetUsers)改为改为 "MyUsers",可以使用以下代码:
csharp
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
      base.OnModelCreating(builder);

      builder.Entity<ApplicationUser>().ToTable("MyUsers");
    }
}


2、修改字段名:
同样地,在 OnModelCreating 方法中使用 Fluent API 可以修改字段名。假设要将用户名字段(UserName)改为 "MyUserName",可以使用以下代码:
csharp
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
      base.OnModelCreating(builder);

      builder.Entity<ApplicationUser>()
            .Property(u => u.UserName)
            .HasColumnName("MyUserName");
    }
}
请注意,修改表名和字段名可能需要进行数据库迁移,以确保新的表结构与数据库保持一致。您可以使用命令行工具或 Package Manager Console 来执行迁移操作。

3、修改迁移数据库
//生成Migrations迁移数据
dotnet ef migrations add InitialCreate
//update数据库,注意数据连接是正确的
dotnet ef database update



admin 发表于 2023-12-11 09:09:57

修改表名和字段名后,如何实现当前数据库表名和字段名的更改

在修改表名和字段名后,您需要执行数据库迁移以确保数据库结构与修改后的模型相匹配。以下是执行数据库迁移的一般步骤:
创建或修改实体类:根据您的需求,在代码中修改实体类(通常是继承自 IdentityUser 类)的属性名称,并且通过 Fluent API 修改表名和字段名。
创建新的迁移:使用 Entity Framework Core 中的命令行工具或者 Package Manager Console,创建一个新的数据库迁移。您可以使用以下命令:

dotnet ef migrations add RenameTablesAndColumns
应用迁移:将新的迁移应用到数据库中,更新数据库结构。使用以下命令:

dotnet ef database update
执行完上述步骤后,数据库表名和字段名应该会被修改为您所定义的新名称。

需要注意的是,在执行数据库迁移之前,请务必备份好数据库,避免因迁移失败导致数据丢失。
请注意,以上步骤是基于 Entity Framework Core 的操作流程,如果您使用的是其他 ORM 或数据库访问框架,具体步骤可能会有所不同。

admin 发表于 2023-12-11 15:50:30

修改其它Identity表的办法。

找到示范类:
public class HondyChatContext : IdentityDbContext<HondyChatUser>
可能是ApplicationDbContent,或者您定义的任意IdentityDbContext继承类,这儿的HondyChatUser,也可以是您命名的IdentityUser继承类。

下面的是非常重要的,IdentityRoleClaim<string>,是带string,IdentityRole是不带<string>的,否则会报错。

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<IdentityRoleClaim<string>>().ToTable("HD_RoleClaims");
    builder.Entity<IdentityRole>().ToTable("HD_Roles");
    builder.Entity<IdentityUserClaim<string>>().ToTable("HD_UserClaims");
    builder.Entity<IdentityUserLogin<string>>().ToTable("HD_UserLogins");
    builder.Entity<IdentityUserRole<string>>().ToTable("HD_UserRoles");
    builder.Entity<IdentityUserToken<string>>().ToTable("HD_UserTokens");
    builder.Entity<HondyChatUser>().ToTable("HD_Users");

}

上面的引用有:
using Hondy.Chat.Areas.Identity.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;


其中Hondy.Chat.Areas.Identity.Data包括HondyChatContext.cs,HondyChatUser.cs两个自定义类,也是标识自动生成的,至于名称是您生成前您填写的表单名。

下面完成Migrations数据:
1、dotnet ef migrations add InitialCreate ,生成20231211074905_InitialCreate代码存放Identity数据,并且将表名按上述要求进行更换了。
2、dotnet ef database update,对SqlServer数据库(由application.json自定义你的数据库连接,可能是别的数据库)进行重写,表名进行修改,并保持原有数据不变,虽然如此,强烈建议先备份数据,再更新数据库。
页: [1]
查看完整版本: 【C#】修改 .NET Identity 中的表名和字段名