簡體   English   中英

EF41中的導航屬性首先使用代碼,而沒有外鍵?

[英]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,而PersonH​​ist現在又有一個條目。 但這是不可能用外鍵...(我不想在Person中刪除Flag / Column!但是我想要從Person到PersonH​​ist的導航屬性...)

導航屬性的邏輯基於外鍵。 因此,如果要映射它並將其用作導航屬性,則必須在PersonHist具有外鍵。 您可以將鍵設置為可空值,但必須正確使用它:

  • 修改映射以刪除默認情況下使用的級聯刪除
  • 在刪除Person或實現自定義數據庫初始化程序並將引用約束替換為ON DELETE SET NULL之前,將所有相關的PersonHist設置為null

如果您不希望外鍵,請不要將其用作導航屬性,並使用單獨的查詢來獲取人員的歷史記錄-但仍然需要一些指向原始“ Person記錄的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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