实体框架的两个外键作为主键

问题描述:

,所以我与实体代码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'。名称值应该是逗号分隔的外键属性名称列表。

我错过了什么?

您需要使用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