2013-03-18 118 views
0

,所以我與實體代碼firest工作,我有一個用戶類,看起來像這樣:實體框架的兩個外鍵作爲主鍵

public class User 
    { 
     [Key] 
     public string Username { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public DateTime LastModified { get; set; } 
    } 

我試圖做一個「朋友表」不管我想出了什麼,我得到了數據庫創建的錯誤。這是我目前有在好友等級:

public class Friend 
    { 
     [Key, ForeignKey("User")] 
     public virtual User MyUser { get; set; } 

     [Key,ForeignKey("User")] 
     public virtual User MyFriend { get; set; } 

     public bool IsAccepted { get; set; } 
    } 

這是錯誤我得到:

的ForeignKeyAttribute財產「MYUSER」上鍵入「Core.Model.Friend」是無效的。在依賴類型'Core.Model.Friend'上找不到外鍵名'User'。名稱值應該是逗號分隔的外鍵屬性名稱列表。

我錯過了什麼?

回答

2

您需要使用Column屬性。通常我會使用這樣的:

public class Friend 
{ 
    [Key] 
    [Column(Order = 0)] 
    public int MyUserId { get; set; } 

    [Key] 
    [Column(Order = 1)] 
    public int MyFriendId { get; set; } 

    [ForeignKey("MyUserId")] 
    public virtual User MyUser { get; set; } 

    [ForeignKey("FriendId")] 
    public virtual User MyFriend { get; set; } 

    public bool IsAccepted { get; set; } 
} 

我不知道,如果你直接映射Column屬性的導航屬性會發生什麼。你可以嘗試它,如果你喜歡,看看會發生什麼......但上述通常適用於我。

另外,如果你改變使用流利的映射,你可以做這樣的事情:

HasKey(u => new { u.MyUserId , u.MyFriendId }); 
+0

我嘗試了上面的代碼,但我改變了整數爲字符串,因爲我的用戶類鍵是一個字符串。當我這樣做時,我現在從數據庫中獲得循環引用錯誤。 – 2013-03-18 02:11:00

+0

這幫助我修復了一個可怕的「無法找到Table_ID列」的錯誤。 – Seth 2017-08-02 18:29:55