指定類外鍵有注釋(DataAnnotation)和FluentAPI兩種方式,下面我們主要使用DataAnnotation指定外鍵關系
第一種方式
//1-指定導航屬性,會自動生成外鍵,命名規則為:“對象名稱_主鍵名” public class TUsers { [Key] public int UserId { get; set; } public string Account { get; set; } public string Password { get; set; } public DateTime CreateDate { get; set; } public List<TUsersRoles> TUsersRolesList { get; set; } } public class TUsersExtInfo { [Key] public int id { get; set; } public virtual TUsers Users { get; set; }//生產的外鍵名稱是Users_UserId,格式為"對象名稱_主角名稱" }
生成的表結構如下:
第二種方法:
//2-默認情況下與導航屬性的主鍵名稱相同的字段會自動被標記為外鍵, public class TUsers { [Key] public int UserId { get; set; } public string Account { get; set; } public string Password { get; set; } public DateTime CreateDate { get; set; } } public class TUsersExtInfo { [Key] public int id { get; set; } public int UserID { get; set; } public virtual TUsers Users { get; set; }//如果沒有聲明TUsers對象,則UserID是一個普通的字段,沒有外鍵關系 }
第三種方法:可指定生成的數據庫中的列名。
public class TUsers { [Key] public int UserId { get; set; } public string Account { get; set; } public string Password { get; set; } public DateTime CreateDate { get; set; } } public class TUsersExtInfo { [Key] public int id { get; set; } public int TUsers_Id { get; set; } [ForeignKey("TUsers_Id")] public virtual TUsers Users { get; set; } }
第四種方法:可指定生成的數據庫中的列名
//方式2的升級版,與導航屬性的主鍵名稱相同的字段會自動被標記為外鍵,然后指定字段對應的數據庫中的列名 public class TUsers { [Key] public int UserId { get; set; } public string Account { get; set; } public string Password { get; set; } public DateTime CreateDate { get; set; } } public class TUsersExtInfo { [Key] public int id { get; set; } [Column("TUsers_Id")] public int UserId { get; set; } public virtual TUsers Users { get; set; } }