实体框架的两个外键作为主键
问题描述:
,所以我与实体代码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 });
我尝试了上面的代码,但我改变了整数为字符串,因为我的用户类键是一个字符串。当我这样做时,我现在从数据库中获得循环引用错误。 – 2013-03-18 02:11:00
这帮助我修复了一个可怕的“无法找到Table_ID列”的错误。 – Seth 2017-08-02 18:29:55