[英]EF Core - How to setup many-to-many for same entity that already has a one-to-many relationship
[英]How to Model One to Many relationship pointing to same entity from different entities in EF
我有一個實體作為學生
public class Student{
..
public ICollection<Picture> Pictures {get;set;}
}
和學校實體
public class School{
..
public ICollection<Picture> Pictures {get;set;}
}
創建該模型並運行遷移時,我可以看到在數據庫的Pictures表中已創建了2個外鍵屬性,分別為StudentId和SchoolId。
在Picture表中具有這些外鍵對我來說似乎不對。
將來,如果另一個實體需要“圖片”列表,則意味着“圖片”表中的另一個外鍵屬性。
如何在代碼優先模型中更改此行為? 還是這是正確的方法?
如果無法在學校和學生之間共享圖片,則可以為這兩種圖片類型創建單獨的實體。 最好的方法是為每種特定的圖片類型創建基類和派生類:
public abstract class Picture
{
public int Id { get; set; }
// ...
}
public class SchoolPicture : Picture
{
// ...
}
public class StudentPicture : Picture
{
// ...
}
然后,School實體引用SchoolPicture,而Student實體引用StudentPicture:
public class School
{
// ...
public virtual ICollection<SchoolPicture> Pictures {get;set;}
}
public class Student
{
// ...
public virtual ICollection<StudentPicture> Pictures {get;set;}
}
這樣,將為圖片創建兩個單獨的表,只用一個外鍵指向相應的父實體:
在學生模型中,您說的是學生與圖片之間存在一對多的關系。 與您的School模型相同。 因此,EF為“學生”和“學校”模型都向“圖片”添加了外鍵。 那是預期的行為。
在Picture表中具有這些外鍵對我來說似乎不對。
根據您的學生和學校模型,我希望EF為圖片添加2個外鍵(StudentId和SchoolId)。 看起來怎么樣?
將來,如果另一個實體需要“圖片”列表,則意味着“圖片”表中的另一個外鍵屬性。
如果創建另一個包含ICollection <Picture> Pictures { get; set; }
ICollection <Picture> Pictures { get; set; }
ICollection <Picture> Pictures { get; set; }
作為屬性,然后是,它將在Picture中創建另一個外鍵。 但是,如果您忽略它,它不會。
我不確定您的期望。 你能詳細說明嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.