EF之Code First設定主外來鍵關係(一)
阿新 • • 發佈:2019-01-29
指定類外來鍵有註釋(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; }
}