![](/img/trans.png)
[英]Entity Framework 6.1 - code first - reference properties not loading correctly
[英]Entity Framework 6.1: Code First navigation properties that do not have corresponding keys defined in database
我正在嘗試使用EF 6.1的“代碼優先”方法(這是我的新手),但是基於數據庫中1.1或1.0關系的導航屬性存在一個奇怪的問題。
我有一個映射到User表的User類,如下所示:
[Table("TL_MF_SEC_USER_MST")]
public class User
{
/// <summary>
/// Table Column : USER_ID
/// </summary>
[Key, Column("USER_ID")]
public decimal ID { get; set; }
/// <summary>
/// Table Column : USER_CODE
/// </summary>
[Column("USER_CODE")]
public string Code { get; set; }
/// <summary>
/// Table Column : DOMAIN_NM
/// </summary>
[Column("DOMAIN_NM")]
public string Domain { get; set; }
/// <summary>
/// Table Column : EMPLOYEE_ID
/// </summary>
[Column("EMPLOYEE_ID")]
public string EmployeeID { get; set; }
並將Employee類映射到Employee表,如下所示:
[Table("TL_MF_EMPLOYEE_MST")]
public class Employee
{
/// <summary>
/// Table Column : EMPLOYEE_CODE
/// </summary>
[Key, Column("EMPLOYEE_CODE")]
public string EmployeeID { get; set; }
/// <summary>
/// Table Column : EMPLOYEE_NAME
/// </summary>
[Column("EMPLOYEE_NAME")]
public string EMPLOYEE_NAME { get; set; }
public string Manager { get; set; }
問題在於這些表之間的“鍵”是User類中的EmployeeID屬性(不是主鍵),它映射到Employee類中的EmployeeID屬性(在數據庫中也不是主鍵或外鍵)。
因此,我試圖在“用戶到雇員”上創建導航屬性,但無法弄清楚如何告訴EF將這兩個非關鍵字段用作與用戶匹配的屬性。
不幸的是,我處於無法對實際數據庫架構進行重大更改的環境中,因為該結構用於管理至少8個應用程序(其中有20個以上實例)中的權限。 不過,可能會進行一些小的更改(例如添加索引或約束)。
如果有一種方法可以通過屬性或流利的api做到這一點,那么我將非常感謝。 歡迎任何建議。
提前致謝。
EF僅接受與主鍵屬性的關聯。 但是,它僅查看模型中定義的主鍵。 因此,由於EmployeeID
的Key
屬性,您可以在關聯中使用它,如下所示:
public class User
{
[Key, Column("USER_ID")]
public decimal ID { get; set; }
...
[Column("EMPLOYEE_ID")]
public string EmployeeID { get; set; }
public Employee Employee { get; set; } // You need this property
}
並且在上下文中重寫OnModelCreating
:
modelBuilder.Entity<User>()
.HasRequired(u => u.Employee) // Or HasOptional
.WithMany()
.HasForeignKey(u => u.EmployeeId);
顯然,看到了這個Key
的屬性EmployeeID
,您肯定EmployeeID
是候選關鍵Employee
。 必須對此絕對保證才能正常工作。
顯然,您使用代碼優先而不進行遷移。 通過遷移,此映射當然將在數據庫中創建主鍵EmployeeId
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.