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

时间:2015-10-25 00:36:08

标签: entity-framework ef-code-first foreign-keys columnname

我有两个实体

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;}
}

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

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

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

1 个答案:

答案 0 :(得分:1)

您有多种选择:

  1. RoomId实体中声明Member 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. 如果您不想在RoomId实体中声明Member FK属性,则可以在上下文类中覆盖OnModelCreating方法 配置您的关系并使用。指定FK名称 MapKey方法:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Member>().HasRequired(m=>m.Room).WithMany(r=>r.ListMember).Map(a => a.MapKey("RoomId")) 
    }
    
  3. 现在,如果您声明RoomId FK属性但想要更改Members表中该列的名称,则可以使用Column数据注释。< / p>