[英]Entity Framework multiple mapping to same table DB first
我有一個來自DB模型的實體框架的問題。
我的問題是由於我的一個模型對一個表有多個引用。
public partial class Customer
{
public int Id { get; set; }
public Nullable<int> PrimaryEngId { get; set; }
public Nullable<int> AssignedDevloperId { get; set; }
public virtual Engineer Engineer { get; set; }
public virtual Engineer Engineer1 { get; set; }
}
在我的模型中,列分別被映射,但是當同事從同一數據庫構建模型時,兩者是相反的。
我認為問題是第一個映射到的是primaryEngId
,Db約束叫做FK_Customer_Engineer
。
隨后添加了分配的開發人員ID,DB約束稱為FK_Customer_Devloper
因此按字母順序Developer
Engineer
在Engineer
和實體框架之前就已經反過來了。
我的代碼在相當多的地方引用了Engineer
,現在它們無法工作
這有什么辦法嗎?
非常感謝
伊恩
您必須在外鍵上為這兩個導航屬性添加缺少的ForeignKey屬性:
[ForeignKey("Primary")]
public int? PrimaryEngId { get; set; }
[ForeignKey("Assigned")]
public int? AssignedDevloperId { get; set; }
public virtual Engineer Primary { get; set; }
public virtual Engineer Assigned { get; set; }
注意 :也不要使用EF的導航屬性的通用名稱。 簡而言之,EF給你的最好的東西之一就是你可以說:
@myCustomer.Assigned.Name
在視圖中等等,你完全搞砸了像Engineer和Engineer1這樣的名字。
注意2 :保持Nullable<int>
代碼生成。 int?
更具可讀性。
注3 :使用VS重構將屬性Engineer
和Engineer1
重命名為它們應該是什么( PrimaryEngineer
和AssignedEningeer
等)。 之后,將ForeignKey
屬性添加到模型中。 那應該夠了。 但是,您正在進行的任何未來更改都必須在代碼中完成,而不是在db中完成。
如果在另一方面,你不斷地新生從數據庫實體和上下文代碼,請確保您的所有外鍵具有有意義的名稱,如EF將使用它們生成的名字。(即不命名Engineer1
出藍色)重新命名的外國用於反映邏輯關系的鍵。 也就是說,你很可能在db中有以下外鍵:
FK_Customer_Engineer
FK_Customer_Engineer1
您需要將它們重命名為
FK_Customer_PrimaryEngineer
FK_Customer_AssignedEngineer
更新 :您可以使用不同的列名和屬性名稱,如下所示:
[Column("PrimaryEngId")]
[ForeignKey("Primary")]
public int? PrimaryID { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.