簡體   English   中英

實體框架首先多個映射到同一個表DB

[英]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 EngineerEngineer和實體框架之前就已經反過來了。

我的代碼在相當多的地方引用了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重構將屬性EngineerEngineer1重命名為它們應該是什么( PrimaryEngineerAssignedEningeer等)。 之后,將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM