EF Core数据库优先模式下如何生成与表名不同的实体类
EF Core数据库优先模式下自定义实体类名并映射原表
完全可行,EF Core虽然没有旧版EF那样的可视化向导,但通过两种方式可以实现你要的效果:
一、反向工程时直接生成目标实体类(批量处理推荐)
如果有大量表需要统一修改命名规则(比如去掉tbl前缀),用自定义反向工程模板最高效:
确保已安装EF Core工具和模板:
dotnet tool install --global dotnet-ef dotnet new install Microsoft.EntityFrameworkCore.Templates导出默认模板到项目的Templates文件夹:
dotnet ef dbcontext scaffold "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer --output-dir Models --force --template-dir Templates修改
Templates/EntityType.cs.t4模板里的实体名生成逻辑:
找到模板中获取实体名称的代码段,替换成能去掉tbl前缀的逻辑,比如:var entityName = table.Name.StartsWith("tbl", StringComparison.OrdinalIgnoreCase) ? table.Name.Substring(3) : table.Name;重新执行scaffold命令后,生成的实体类就是
Students.cs,并且模板会自动在类上添加[Table("tblStudents")]数据注解,或者在DbContext的OnModelCreating里配置Fluent API映射,无需手动修改。
二、生成后手动添加映射(少量表推荐)
如果只有个别表需要调整,生成实体类后直接修改即可:
- 数据注解方式:在
Students.cs里添加表映射注解using System.ComponentModel.DataAnnotations.Schema; [Table("tblStudents")] public class Students { // 这里是实体属性,比如public int Id { get; set; } } - Fluent API方式:在DbContext的
OnModelCreating方法里配置protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Students>().ToTable("tblStudents"); // 其他实体的映射配置 }
两种方式都能实现Students实体类与数据库tblStudents表的正确映射,根据你的表数量选择合适的方案即可。
内容的提问来源于stack exchange,提问作者dblwizard
相关产品推荐
相关产品推荐

