9.5 翻譯系列:數據註解之ForeignKey特性【EF 6 Code-First系列】

原文連接:https://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx
html

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屬性將會自動變成外鍵屬性,並在數據表中生成外鍵:
enter description here
ForeignKey特性重寫了默認的外鍵約定,他容許咱們在依賴實體中【這裏是Student】指定外鍵屬性,這個指定的外鍵屬性名稱,不須要匹配主體實體【這裏是Standard】中的主鍵屬性名稱。
使用ForeignKey數據註解特性,能夠有如下三種方式:測試

  1. [ForeignKey(NavigationPropertyName)]應用在依賴實體的外鍵標量屬性上面,ForeignKey裏面的name參數,填寫導航屬性的名稱
  2. [ForeignKey(ForeignKeyPropertyName)]應用在依賴實體的導航屬性上面,ForeignKey裏面的name參數,填寫外鍵屬性的名稱
  3. [ForeignKey(ForeignKeyPropertyName)]應用在主體實體的導航屬性上面,ForeignKey裏面的name參數,填寫外鍵屬性的名稱

1.[ForeignKey] on the foreign key property in the dependent entity

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列了。
enter description herespa

2.[ForeignKey] on the navigation property in the dependent entity

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列了。翻譯

3.[ForeignKey] on the navigation property in the principal entity

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

相關文章
相關標籤/搜索