【问题标题】:Create a many-to-many relationship in a model to itself在模型中创建与其自身的多对多关系
【发布时间】:2020-04-01 16:03:52
【问题描述】:

我正在尝试制作一个仅处理一个模型的正确 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")] 是如何工作的,但这似乎会导致错误。一个人可能有多个最好的朋友,所以我必须在朋友表中有很多条目,其中SelectedPerson 将是相同的,以便获得他们所有最好的朋友,我觉得如果有一个好方法一次获取他们的朋友列表,而不仅仅是一个单一的朋友,这将有优势,但似乎会导致某种级联删除错误?

我知道在 stackoverflow 上存在与此类似的问题,但我找不到任何将它加入同一个表的地方,我目前已将 ForeignKeys 注释掉,因为 EF 无法处理同名的外键。

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

【问题讨论】:

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


    【解决方案1】:

    你应该在父类中使用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;}
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 1970-01-01
      • 2023-03-10
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 2017-08-25
      • 1970-01-01
      相关资源
      最近更新 更多