簡體   English   中英

如何在EF中指向來自不同實體的同一實體的一對多關系建模

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM