I have an ASP.NET MVC3 application, where I use Entity Framework 4.3 Code-First and Migrations.
I’ve been trying to create a many-to-many relationship between entities of the same type, but when I scaffold the migration with Migrations, it generates a one-to-one relationship.
The idea is that one user should be able to follow multiple other users (think Twitter).
My User model look something like this:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public DateTime Registered { get; set; }
...
public virtual ICollection<User> Follows { get; set; }
}
When I scaffold the the added Follows-property, I get a migration like this:
public partial class FollowUser : DbMigration
{
public override void Up()
{
AddColumn("User", "User_UserId", c => c.Int());
AddForeignKey("User", "User_UserId", "User", "UserId");
CreateIndex("User", "User_UserId");
}
...
}
So Entity Framework interprets my model as a one-to-one relationship between two users.
How can I create a many-to-many relationship between entities of the same type?
Since It is a Many to Many Self Joined relationship, User entity should have a
FollowersandFollowingproperties both of TypeUser. So Let us alter your class to include thoseNow update the DbContext class to have a Property which returns the Users
We need to tell EntityFramework that we need to have a many to many relations ship between these two. So Let us do that with Fluent API by overriding
OnModelCreatingmethodNow Entity Framework will create the tables like this.
Note that we explicitly told Entity Framework to use UserId and FollowerId as the Forign Key column name. If we havent mentioned that, EF will use
User_IDandUser_ID1as the column names.