实体框架多对多自我引用

时间:2012-03-09 19:43:10

标签: entity-framework-4

我有一个实体用户。每个用户应该有很多朋友和老师。使用EF Code First,我对如何实现我想要的东西感到有点困惑。我看到了自我引用的例子,但没有多对多的例子。例如:

public class Employee
{
  #region Properties

  public int EmployeeID { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }

  public int? ManagerID { get; set; }
  public Employee Manager { get; set; }

  #endregion
}

和modelBuilder:

modelBuilder.Entity<Employee>().
      HasOptional(e => e.Manager).
      WithMany().
      HasForeignKey(m => m.ManagerID);

如何在我的情况下创建一个具有自我引用的实体,其中有朋友(如果是b的朋友,这意味着b是a的朋友)和教师(如果是b的老师,b是学生的一个)?

很抱歉,如果已存在类似的帖子。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:10)

好的,因为很多人都回答了这个问题;),我搜索了一下,我找到了解决方案。该实体看起来像:

public class User
{
    public int ID { get; set; }
    public string UserName { get; set; }

    public virtual ICollection<User> Friends { get; set; }
}

模型构建者:

modelBuilder.Entity<User>()
                .HasMany(x => x.Friends)
                .WithMany();

最后我制作了帮助方法BeFriend和BecomeTeacherStudent,确保当你成为某人的朋友时,他会成为你的朋友(以及师生的相应事物)。