EF 4.1代码首先无效的列名称“User_UserId”

时间:2012-08-20 16:02:12

标签: c# entity-framework

我无法弄清楚为什么会导致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; }
}

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

3 个答案:

答案 0 :(得分:6)

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

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

InverseProperty

现在,public class FriendList { // ... [DataMember] [InverseProperty("FriendLists")] public virtual User User { get; set; } // ... } User.FriendLists是相同的一对多关系的端点,FriendList.User定义了第二个一对多关系(但没有端点) FriendList.FriendUser类)。

答案 1 :(得分:1)

我想:

1)您的案例中的ForeignKey属性必须设置为[ForeignKey("UserId")]而不是[ForeignKey("User")]

2)或者如果未映射其中一个类,则必须在其上设置属性[NotMapped];

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

至少它对我有用。