最常用方式是用[Column]注解直接指定列名,支持列名和数据库类型双参数,Fluent API配置优先级高于注解,仅影响列名映射不控制是否映射或主键等元数据。
EF Core 中指定列名最常用、最直观的方式就是用 [Column] 注解,它直接写在实体属性上,告诉 EF 这个属性对应数据库里的哪个列名。
当你命名习惯和数据库不一致时(比如 C# 用 Title,数据库要求 title_name),就用它:
public class Blog
{
public int Id { get; set; }
[Column("blog_title")] // 映射到数据库列 blog_title
public string Title { get; set; }
[Column("created_at")]
public DateTime CreatedTime { get; set; }}
这样 EF 在生成迁移(migration)或执行查询时,都会把 Title 当作 blog_title 来处理。
进阶用法:同时指定列名和数据类型
[Column] 支持两个参数:列名 + 数据库类型(TypeName),适合需要精确控制字段定义的场景:

[Column("price")] → 只改列名[Column("price", TypeName = "decimal(18,2)")] → 列名 + 精确类型[Column("remark", TypeName = "nvarchar(500)")] → 支持 SQL Server 的 Unicode 字符串注意:TypeName 值是数据库原生类型,不同数据库写法略有差异(如 PostgreSQL 用 text,MySQL 用 varchar(255))。
如果同一个属性既用了 [Column],又在 OnModelCreating 里调用 HasColumnName(),Fluent API 的配置会覆盖注解。也就是说:
[Column] 更快更直观别忘了这些小细节,否则容易踩坑:
[Column] 只影响列名,不影响是否映射 —— 如果想完全跳过某属性,要用 [NotMapped] 或 Ignore()
IsPrimaryKey)不能靠 [Column] 设置,得用 [Key]、[ForeignKey] 或 Fluent API基本上就这些。用好 [Column] 能让你的实体和数据库结构对齐得更干净,尤其对接老库或跨团队协作时特别管用。