弘帝企业智能建站系统交流平台

 找回密码
 立即注册
查看: 368|回复: 2

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

[复制链接]
发表于 2023-12-10 22:40:40 | 显示全部楼层 |阅读模式
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



回复

使用道具 举报

 楼主| 发表于 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 或数据库访问框架,具体步骤可能会有所不同。
回复 支持 反对

使用道具 举报

 楼主| 发表于 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自定义你的数据库连接,可能是别的数据库)进行重写,表名进行修改,并保持原有数据不变,虽然如此,强烈建议先备份数据,再更新数据库。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|弘帝企业智能建站系统 ( 皖ICP备07503252号 )

GMT+8, 2024-4-28 11:34 , Processed in 0.077946 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表