我第一次使用代碼優先的方法(我以前總是先使用資料庫),并試圖理解一些基本概念。如果我在兩個物體之間創建外鍵關系,物體框架如何知道在關系的兩側使用哪些屬性(列)?用一個簡單的代碼示例可能會更好地解釋我的問題。我有兩個物體,患者和治療。一個病人可以有多個治療,所以病人和治療之間會有一對多的關系,兩個物體之間存在外鍵關系。這是我的物體類。請注意,為了解釋起見,這些都被大大簡化了。
public class Patient
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<PatientTreatment> PatientTreatment { get; set; }
}
public class PatientTreatment
{
public int Id { get; set; }
public string TreatmentDescription { get; set; }
public int PatientId { get; set; }
public virtual Patient Patient { get; set; }
}
因此,對于患者物體,主鍵將是 Id,對于 PatientTreatment 物體,其主鍵也將是 Id
對于外鍵關系,根據我到目前為止搜索的內容,上面的代碼將為我創建這種關系,這是正確的嗎?如果是這樣,物體框架如何知道 PatientTreatment 中的 PatientId 與 Patient 物體中的 Id 相關聯?這就是它在資料庫(SQL Server)中的樣子,但我看不出物體框架如何知道這一點。我對代碼優先方法真的很陌生,所以我只是想了解這是如何作業的。誰能向我解釋一下?我還讀到,設定上述關系不會創建索引(PatientTreatment 中的 PatientId),因此也必須在代碼中創建這些索引
uj5u.com熱心網友回復:
正如 Caius提到的,EF 使用約定。
在你的情況下:
- EF 知道有兩個物體物件 -
Patient和PatientTreatment,因為這些類存在 dbSet 和可選配置。 Patient包含所謂的導航屬性,導致PatientTreatment's - 一個集合,但它可能是大多數實作的東西IEnumerable- EF 假設您要在此處創建關系。Patient有一個Id欄位 - EF 通過命名約定沒有任何配置將假定這是一個物體鍵。同樣適用PatientTreatmentPatientTreatment有一個單一的導航屬性Patient- 這再次按照慣例告訴 EF 你希望這兩個物體之間的關系是一對多的 - 一側是集合,另一側是單個參考。
按照慣例,即使沒有導航屬性,Ofc 一對多也是可能的PatientTreatment- 只是為了清楚。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/369654.html
