0

我无法弄清楚为什么这会导致 EF 错误:保存在 EF 中时列名“User_UserId”无效。

这是我的模型:

 [DataContract(IsReference = true)]
public class User
{
    [Key]
    [DataMember]
    public virtual Guid UserId { get; set; }

    [DataMember]
    public virtual string Username { get; set; }

    [DataMember]
    public virtual string Password { get; set; }

    [DataMember]
    public virtual string Email { get; set; }

    [DataMember]
    public virtual ICollection<FriendList> FriendLists { get; set; }
}

[DataContract(IsReference = true)]
public class FriendList
{
    [Key]
    [DataMember]
    public virtual Guid FriendListId { get; set; }

    [DataMember]
    [ForeignKey("User")]
    public virtual Guid UserId { get; set; }

    [DataMember]
    public virtual User User { get; set; }

    [DataMember]
    [ForeignKey("FriendUser")]
    public virtual Guid FriendUserId { get; set; }

    [DataMember]
    public virtual User FriendUser { get; set; }
}

基本上,它与拥有好友列表的用户的一对多关系。

4

3 回答 3

6

您的类中有两个导航类型User的属性FriendList。EF 无法确定其中哪些属于User.FriendLists,然后为所有三个导航属性创建单独的一对多关系,其中一个具有默认外键名称User_UserId

InverseProperty您可以使用以下属性覆盖此约定:

public class FriendList
{
    // ...

    [DataMember]
    [InverseProperty("FriendLists")]
    public virtual User User { get; set; }

    // ...
}

现在,User.FriendListsFriendList.User是相同一对多关系的端点,并FriendList.FriendUser定义了第二个一对多关系(但在User类中没有端点)。

于 2012-08-20T19:10:26.003 回答
1

我猜:

1)您的情况下的属性 ForeignKey 必须设置为[ForeignKey("UserId")]而不是[ForeignKey("User")]

2) 或者如果这些类之一没有被映射,您必须在其上设置属性 [NotMapped];

于 2012-08-20T18:52:44.473 回答
0

您的 ForeignKey 属性位于错误的位置。

试试这个:

[DataMember]
public virtual Guid UserId { get; set; }

[DataMember]
[ForeignKey("UserId")]
public virtual User User { get; set; }

[DataMember]
public virtual Guid FriendUserId { get; set; }

[DataMember]
[ForeignKey("FriendUserId")]
public virtual User FriendUser { get; set; }

至少它对我有用。

于 2013-10-10T13:43:46.947 回答