c# - 在模型中创建与其自身的多对多关系
问题描述
我正在尝试制作一个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 无法处理同名的外键。
非常感谢任何帮助/建议,感谢您的宝贵时间。
解决方案
您应该使用InverseProperty
in 父类来定义多个关系
并且不要使用重复的名称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;}
}
推荐阅读
- c - How to pass "a pointer to a function with parameters" to another function
- bash - 如何检查文件是否存在并且是文本文件?
- vue.js - 在事件总线事件上打开模式对话框
- laravel - 如何在组件的脚本部分使用 vue-i18n 翻译功能
- rdf - rdfproc took forever to parse a 8.33 MB file?
- android - Duplicate object types in Apollo GraphQL for Android
- asp.net - 如何修复向我的应用程序提供错误 AD 身份的窗口?
- swift - 来自 url 的 Swift.Streaming 音频,错误代码为 -999 “已取消”
- elasticsearch - 如何在术语聚合下使用 bucket_script 聚合中的总命中数?
- jquery - 我如何在 vue.js 中使用来自 jquery.html() 的按钮的 onclick