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?
You have several options to do that:
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.
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.