删除 EF 代码第一个外键 table 列中的 table 名称前缀

Remove table name prefix in EF code first foreign key table column

我有两个实体

Room{
    [Key]
    public int RoomID {get;set;}
    public String RoomName {get;set;}
    public List<Member> ListMember {get;set;}
}

Member {
    [Key]
    public int MemberID {get;set;}
    public String MemberName {get;set;}
    public Room Room {get;set;}
}

生成数据库时,table成员看起来像:

Member(
    MemberID int,
    MemberName nvarchar.
    Room_RoomID int   //references to Room(RoomID)
)

我希望外键列的名称为 RoomID(与 Room 的原始名称相同)而不是 (Room_RoomID)。 我该怎么做?

您有多种选择:

  1. Member 实体中声明 RoomId FK 属性 并使用 ForeignKey 数据注释:

    public classMember {
        [Key]
        public int MemberID {get;set;}
        public String MemberName {get;set;}
    
        [ForeignKey("Room")]
        public int RoomID {get;set;}
        public Room Room {get;set;}
    }
    

    Code First 约定创建与 属性 名称相同的列名称。

  2. 如果您不想在您的 Member 实体中声明 RoomId FK 属性,您可以在您的 OnModelCreating 实体中覆盖 OnModelCreating 方法上下文 class 到 配置您的关系并使用 MapKey方法:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Member>().HasRequired(m=>m.Room).WithMany(r=>r.ListMember).Map(a => a.MapKey("RoomId")) 
    }
    

现在,如果您声明 RoomId FK 属性 但您想更改 Members table 中该列的名称,您可以使用Column 数据注释。