EF Core Table注解怎么用 EF Core指定表名方法

来源:这里教程网 时间:2026-02-21 17:36:17 作者:

EF Core 中指定表名最常用、最直接的方式就是使用

[Table]
数据注解,它写在实体类上,告诉 EF 这个类对应数据库里的哪张表。

用 [Table] 注解指定表名

在实体类顶部加上

[Table("表名")]
,EF Core 就会把这个类映射到指定的表,而不是默认的复数形式(比如
Blog
类默认建表叫
Blogs
)。

示例:

using System.ComponentModel.DataAnnotations.Schema;
[Table("t_blog")]
public class Blog
{
    public int Id { get; set; }
    public string Url { get; set; }
}

这样迁移生成或自动建表时,就会创建名为

t_blog
的表,而不是
Blogs

注意:

[Table]
支持同时指定架构(schema),比如
[Table("t_blog", Schema = "dbo")]
[Table("t_blog", Schema = "sales")]
,适合多 schema 场景。

Fluent API 方式(ToTable)

如果不想把配置写进实体类(避免业务代码和数据映射耦合),推荐用 Fluent API,在

DbContext.OnModelCreating
里统一配置:

单表指定:
modelBuilder.Entity<blog>().ToTable("t_blog");</blog>
带 schema:
modelBuilder.Entity<blog>().ToTable("t_blog", "sales");</blog>
也可以在独立的配置类中调用:
builder.ToTable("t_blog");
(配合
IEntityTypeConfiguration<t></t>

这种方式更灵活,支持运行时动态判断,也方便做批量配置(比如所有表加前缀)。

两种方式能混用吗?

技术上可以,但不建议。

[Table]
是声明式、静态的,编译期就固定了
ToTable
是命令式、可编程的,优先级更高 —— 如果两者都写了,
ToTable
会覆盖
[Table]
混用容易造成维护困惑,尤其团队协作时,建议选一种风格并保持一致

改表名后要注意迁移

已存在数据表的情况下修改表名,EF Core 不会自动重命名旧表,需要手动处理:

执行
Add-Migration RenameBlogTable
后,打开生成的迁移文件
DropTable("Blogs")
CreateTable("t_blog")
改成
RenameTable("Blogs", "t_blog")
再运行
Update-Database

否则会删旧表、建新表,导致数据丢失。

基本上就这些。用

[Table]
最快上手,用
ToTable
更利于长期维护 —— 看项目规模和团队规范选就行。

相关推荐

热文推荐