Search code examples
entity-frameworkforeign-keysef-code-first

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


I have two Entities:

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

when generate the database, table Member look like:

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

I want the foreign key column have name RoomID (same as Room's original name) instead of (Room_RoomID) . How can I do that?


Solution

  • You have several options to do that:

    1. Declare that RoomId FK property in the Member entity and use the ForeignKey data annotation:

      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 convention creates a column name same as the property name.

    2. If you don't want to declare the RoomId FK property in your Member entity, you can override OnModelCreating method in your context class to configure your relationship and specify the FK name using the MapKey method:

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

    Now, in case that you declare the RoomId FK property but you want to change the name of that column in your Members table , you can use the Column data annotation.