1、通过重写OnModelCreating来实现
public class SchedulerContext : DbContext
{
public SchedulerContext(DbContextOptions<SchedulerContext> options)
: base(options)
{
}
public DbSet<SysUserInfo> Users { get; set; }
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<Permission> Permissions { get; set; }
public DbSet<Modules> Modules { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<RoleModulePermission> RoleModulePermissions { get; set; }
//已经改用EFCore.NamingConventions包的UseSnakeCaseNamingConvention,不需要再使用下面的代码
//protected override void OnModelCreating(ModelBuilder modelBuilder)
//{
// // 自动将实体类名和属性名转换为 snake_case
// foreach (var entity in modelBuilder.Model.GetEntityTypes())
// {
// // 表名转换(如 UserProfile -> user_profile)
// entity.SetTableName(ConvertToSnakeCase(entity.GetTableName()));
// // 列名转换(如 CreatedAt -> created_at)
// foreach (var property in entity.GetProperties())
// {
// property.SetColumnName(ConvertToSnakeCase(property.GetColumnName()));
// }
// }
//}
//private static string ConvertToSnakeCase(string input)
//{
// if (string.IsNullOrEmpty(input)) return input;
// return Regex.Replace(input, "(?<=[a-z])([A-Z])", "_$1").ToLower();
//}
}
}
2、使用EFCore.NamingConventions
在NuGet包管理工具安装"EFCore.NamingConventions",然后在Program.cs类的连接数据库的位置加上UseSnakeCaseNamingConvention方法
builder.Services.AddDbContext<SchedulerContext>(opt =>
{
opt.UseNpgsql(builder.Configuration.GetConnectionString("SchedulerContext"))
.UseSnakeCaseNamingConvention();//将PostgreSQL对蛇形命名法(snake_case)的默认映射方式改为C#驼峰命名法:
});