I\'m tring to figure out how to represent friendships between users with Entity Framework (5) Code First. My initial idea was to create a class Friendship which contains ref
I managed to find a similar question on SO after some more googling, and there's a solution there that at least made it into the database without problems.
Basically, I added foreign keys per user to the Friendship
class, made them a composite primary key and configured the second foreign key not to cascade on delete. I ended up using EF fluent configuration.
public class Friendship
{
public virtual int UserId1 { get; set; }
public virtual int UserId2 { get; set; }
public virtual User User1 { get; set; }
public virtual User User2 { get; set; }
public DateTime since;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Entity<Friendship>().HasKey(f => new { f.UserId1, f.UserId2 });
modelBuilder.Entity<Friendship>()
.HasRequired(f => f.User1)
.WithMany()
.HasForeignKey(f => f.UserId1);
modelBuilder.Entity<Friendship>()
.HasRequired(f => f.User2)
.WithMany()
.HasForeignKey(f => f.UserId2)
.WillCascadeOnDelete(false);
}
You could define the foreign keys yourself or remove cascade delete, depending on your scenario. See this related question : Entity Framework Code First: FOREIGN KEY constraint may cause cycles or multiple cascade paths