使用EF时,继承Entity的模型如何将Id重命名为Model_Id?
当然有办法啦!我来给你详细讲讲两种可行的方案,不管你用的是EF Core还是EF6都能搞定:
方法一:用数据注解快速配置
因为你的模型继承自Entity基类,你可以在子类里重新定义主键属性,通过数据注解指定主键和数据库列名:
public class YourModel : Entity { // 重新定义主键,隐藏基类的Id属性 [Key] [Column("Model_Id")] // 这行指定数据库里的列名是Model_Id public new int Model_Id { get; set; } // 如果基类的Id是可重写的,也可以用override代替new // public override int Model_Id { get; set; } // 别忘了把基类的Id排除映射,避免EF识别出两个主键 [NotMapped] public override int Id { get; set; } }
这种方式比较直观,直接在模型类里搞定配置,适合简单场景。
方法二:用Fluent API灵活配置(更推荐)
如果不想在模型里加一堆注解,或者基类是你没法修改的,就用Fluent API在DbContext的OnModelCreating方法里配置:
第一步:先在模型里添加新的主键属性
public class YourModel : Entity { public int Model_Id { get; set; } }
第二步:在DbContext里配置
如果是EF Core:
protected override void OnModelCreating(ModelBuilder modelBuilder) { // 指定YourModel的主键是Model_Id,同时设置数据库列名 modelBuilder.Entity<YourModel>() .HasKey(m => m.Model_Id) .Property(m => m.Model_Id) .HasColumnName("Model_Id"); // 忽略基类的Id属性,避免EF把它也当成映射列 modelBuilder.Entity<YourModel>() .Ignore(m => m.Id); }
如果是EF6:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<YourModel>() .HasKey(m => m.Model_Id) .Property(m => m.Model_Id) .HasColumnName("Model_Id"); modelBuilder.Entity<YourModel>() .Ignore(m => m.Id); }
最后一步:更新数据库
不管用哪种方法,配置完之后都需要通过迁移更新数据库结构:
- 打开Package Manager Console(或者用.NET CLI)
- 运行迁移命令:
# EF Core/.NET CLI dotnet ef migrations add RenamePrimaryKeyToModelId dotnet ef database update # EF6/Package Manager Console Add-Migration RenamePrimaryKeyToModelId Update-Database
小提醒
如果你的数据库里已经有数据,迁移时记得手动修改生成的迁移文件,添加数据迁移的SQL语句(比如把原来Id列的数据复制到Model_Id列),避免数据丢失哦!
内容的提问来源于stack exchange,提问作者Lajil Adel
相关产品推荐
相关产品推荐

