[英]Navigation properties in EF41 with code first, without having a foreign key?
是否可以先使用代碼在EF41中創建/映射導航屬性,而無需使用外鍵? 就我而言,我需要它來進行歷史化:
public class Person
{
public virtual Guid ID { get; set; }
public virtual string Name { get; set; }
public virtual IList<PersonHist> History { get; set; }
}
public class PersonHist
{
public virtual Guid ID { get; set; }
public virtual Guid PersonID { get; set; }
public virtual string Name { get; set; }
}
想象一下:一個人被更改了幾次,因此在“人”中是一個條目,在“人歷史”中是N個歷史條目。 現在,我刪除了Person,因此Person不應該擁有此Person,而PersonHist現在又有一個條目。 但這是不可能用外鍵...(我不想在Person中刪除Flag / Column!但是我想要從Person到PersonHist的導航屬性...)
導航屬性的邏輯基於外鍵。 因此,如果要映射它並將其用作導航屬性,則必須在PersonHist
具有外鍵。 您可以將鍵設置為可空值,但必須正確使用它:
Person
或實現自定義數據庫初始化程序並將引用約束替換為ON DELETE SET NULL
之前,將所有相關的PersonHist
設置為null 如果您不希望外鍵,請不要將其用作導航屬性,並使用單獨的查詢來獲取人員的歷史記錄-但仍然需要一些指向原始“ Person
記錄的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.