3

我在EF5項目的Code First中使用手動映射實體,並想使用FK作爲複合PK。我在測繪類(不FK)唯一的導航屬性如下提到:沒有關鍵屬性的複合PK

class MyMapping 
{ 
    public virtual Mapped1 {get;set;} 
    public virtual Mapped2 {get;set;} 
} 

我不想添加像「廉政Mapped1FK」 /「詮釋Mapped2FK」領域,但我怎麼也找不到指定組合鍵在這種情況下。

我認爲它應該是這樣的:

modelBuilder.Entity<MyMapping>() 
    .HasKey(k => k.Mapped1) 
    .HasKey(k => k.Mapped2); 

modelBuilder.Entity<MyMapping>() 
    .HasKey(k => { k.Mapped1, k.Mapped2}); 

,但我不知道究竟是什麼權利。

回答

2

無法將導航屬性用作主鍵屬性(無論是否合成)。作爲Slauma形容這是不可能做到我想要的東西,而不會引入原始FK屬性,如intstringGuid

+0

我認爲EF在創建原始屬性的情況下,當我指定,例如,一對一的關係,只有導航屬性?我就是這樣問的。 –

+0

@ AlexG.P .:是的,對於**外鍵屬性**而言是這樣,但對於**(主)鍵屬性**則不適用。如果你的一個外鍵是一個(或一部分)主鍵,同時你不得不在你的模型中公開這個FK作爲原始屬性。你不能單獨使用導航屬性。 – Slauma

0

- 關鍵屬性必須有一個基本類型。

所以我決定用我的映射實體與普通POCO合作 - 繼承基類

public int Id {get;set;} 

聲明,並以此爲PK。

另外,在其他來源中,建議遵循以下原則:由於體系結構認爲:將簡單映射(2 FK)轉換爲複雜映射(2FK +自定義字段)時,它將成爲項目中的其他任何其他實體應該有相同的約束和結構。