EF 6 Code-First系列文章目錄:數據庫
在EF 6和EF Core中,數據註解中的ForeignKey特性,是用來在兩個實體間配置外鍵關係。根據默認的約定,當屬性的名稱與相關實體的主鍵屬性匹配時,EF將該屬性做爲外鍵屬性。ForeignKey Signature: [ForeignKey(name string)]
name:相關聯的導航屬性的名稱或者相關聯的外鍵屬性名稱
看看下面實體間的一對多關係:app
using System.ComponentModel.DataAnnotations.Schema;
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
//Foreign key for Standard
public int StandardId { get; set; }
public Standard Standard { get; set; }
}
public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; }
public ICollection<Student> Students { get; set; }
}
上面的代碼例子中,描述了Student和Standard實體中的一對多關係。爲了解釋一對多關係,Student類包含了一個StandardId屬性還有一個引用類型的屬性Standard,而且Standard實體包含了一個集合類型的導航屬性Students,Student實體中的StandardId屬性匹配上了Standard實體中的主鍵屬性名稱StandardId,因此Student實體中的StandardId屬性將會自動變成外鍵屬性,並在數據表中生成外鍵:
ForeignKey特性重寫了默認的外鍵約定,他容許咱們在依賴實體中【這裏是Student】指定外鍵屬性,這個指定的外鍵屬性名稱,不須要匹配主體實體【這裏是Standard】中的主鍵屬性名稱。
使用ForeignKey數據註解特性,能夠有如下三種方式:測試
ForeignKey應用在依賴實體的外鍵屬性上面,相關聯的導航屬性的名稱做爲ForeignKey的name參數傳入:ui
using System.ComponentModel.DataAnnotations.Schema;
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
[ForeignKey("Standard")]
public int StandardRefId { get; set; }
public Standard Standard { get; set; }
}
public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; }
public ICollection<Student> Students { get; set; }
}
在上面的例子中,ForeignKey特性應用於StandardRefId屬性上,而且傳入導航屬性的名稱Standard到name參數上,這樣就會在Students表中建立一個外鍵列StandardRefId,這樣就不會生成默認的StandardID列了。
spa
ForeignKey特性能夠應用在導航屬性上面,而後name參數就指定外鍵屬性列的名稱:.net
using System.ComponentModel.DataAnnotations.Schema;
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int StandardRefId { get; set; }
[ForeignKey("StandardRefId")]
public Standard Standard { get; set; }
}
public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; }
public ICollection<Student> Students { get; set; }
}
在上面的例子中,ForeignKey特性應用在Standard導航屬性上面,name參數就是外鍵屬性的名稱StandardRefId,這樣就會在Students數據表中,生成一個StandardRefId外鍵列,就不會生成默認的StandardId列了。翻譯
ForeignKey特性能夠應用在主體實體的導航屬性上面,name參數就指定外鍵屬性的名稱:code
using System.ComponentModel.DataAnnotations.Schema;
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int StandardRefId { get; set; }
public Standard Standard { get; set; }
}
public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; }
[ForeignKey("StandardRefId")]
public ICollection<Student> Students { get; set; }
}
在上面的例子中,ForeignKey特性應用於主體實體Standard中的導航屬性Students上,這樣一樣會在Students表中建立一個外鍵列StandardRefId.
好了,以上就是數據註解之ForeignKey特性,你們有什麼不明白能夠留言,感謝支持!htm