EF Core如何自定义表名和列名 EF Core ToTable和HasColumnName方法

admin 百科 13
EF Core 中通过 ToTable 和 HasColumnName 自定义表名与列名,优先级高于约定;ToTable 支持指定表名、架构及分表,HasColumnName 用于适配下划线命名、关键字等场景,二者均需在 OnModelCreating 中配置。

EF Core如何自定义表名和列名 EF Core ToTable和HasColumnName方法-第1张图片-佛山资讯网

EF Core 中自定义表名和列名,主要通过 ToTableHasColumnName 两个 Fluent API 方法实现,它们在 OnModelCreating 中配置,优先级高于约定(如类名自动映射为表名、属性名自动映射为列名)。

用 ToTable 自定义表名

默认情况下,EF Core 将 DbSet 的泛型类型名(如 Blog)作为表名。使用 ToTable 可覆盖该行为,支持指定表名、架构名,甚至同一实体映射到多个表(分表场景)。

  • modelBuilder.Entity<blog>().ToTable("blogs");</blog> —— 表名改为小写 blogs
  • modelBuilder.Entity<blog>().ToTable("Posts", "content");</blog> —— 表名 Posts,架构为 content(SQL Server/PostgreSQL 支持)
  • modelBuilder.Entity<blog>().ToTable("blog_archive_2024");</blog> —— 静态分表命名,适用于归档表

用 HasColumnName 自定义列名

默认列名与属性名一致。当数据库字段使用下划线命名(如 created_at)、保留字(如 order)或需兼容旧库时,用 HasColumnName 显式指定列名。

  • modelBuilder.Entity<blog>().Property(e => e.CreatedTime).HasColumnName("created_at");</blog>
  • modelBuilder.Entity<order>().Property(e => e.Order).HasColumnName("order_number");</order> —— 避免用 Order 作列名(SQL 关键字)
  • 可链式调用:.HasColumnName("is_active").HasDefaultValue(false)

批量配置与约定优先技巧

若项目统一采用 snake_case 命名,不建议逐个调用 HasColumnName,而应结合约定(ModelBuilder.Conventions)或循环配置:

标签: mysql ai 常见问题 c#

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~