在自身模型中建立多对多关系

时间:2020-04-01 16:03:52

标签: c# asp.net asp.net-mvc entity-framework

我正在尝试制作一个仅处理一个模型的正确join表,我打算为此表设置CRUD页,以供以后使用,因此我认为它不能成为原始模型。

public class Person
{
  [Key]
  public int PersonID { get; set;}

  public string Firstname { get; set;}
  public string LastName { get; set;}
  public string Birthday { get; set;}
}

现在,我想跟踪人们,他们最好的朋友以及他们最好的朋友的生日。

public class Friends
{
  [Key]
  public int FriendshipID {get; set;}

  [ForeignKey("Person")]
  public Person SelectedPerson {get; set;}
  public int SelectedPersonID {get; set;}

  [ForeignKey("Person")]
  public Person Friend {get; set;}
  public int FriendID {get; set;}
}

这有一些问题,我不完全了解[ForeignKey("xxxx")]的工作原理,但这似乎会导致错误。一个人可能有多个最好的朋友,所以我必须在friends表中有很多条目,其中的SelectedPerson相同,才能得到他们所有的最好的朋友,我觉得如果有一个一次获得一个朋友列表而不是一个单一朋友的好方法,虽然这会有所好处,但似乎会导致某种级联删除错误?

我知道在stackoverflow上存在与此问题类似的问题,但是我找不到它连接到同一表的任何地方,由于EF无法处理相同名称的外键,因此我目前已注释了ForeignKeys。

非常感谢您的帮助/建议,谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:2)

您应该在父类中使用InverseProperty来定义多个关系

请勿ForeignKey

使用重复的名称
public class Person
{
  [Key]
  public int PersonID { get; set;}

  public string Firstname { get; set;}
  public string LastName { get; set;}
  public string Birthday { get; set;}

  [InverseProperty("SelectedPerson")]
  public ICollection<Friends> SelectedPerson { get; set; }

  [InverseProperty("Friend")]
  public ICollection<Friends> SelectedFriends { get; set; }
}

然后将Friends类更改为此

public class Friends
{
  [Key]
  public int FriendshipID {get; set;}

  [ForeignKey("SelectedPersonID")]
  public Person SelectedPerson {get; set;}
  public int SelectedPersonID {get; set;}

  [ForeignKey("FriendID")]
  public Person Friend {get; set;}
  public int FriendID {get; set;}
}
相关问题