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

时间:2013-03-18 01:12:00

标签: c# entity-framework

所以我正在使用实体代码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; }
    }

这是我得到的错误:

“Core.Model.Friend”类型的属性“MyUser”上的ForeignKeyAttribute无效。在依赖类型“Core.Model.Friend”上找不到外键名称“User”。 Name值应该是以逗号分隔的外键属性名称列表。

我错过了什么?

1 个答案:

答案 0 :(得分: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 });