C# EF 4.1代码第一个无效列名“;用户“用户ID”;

C# EF 4.1代码第一个无效列名“;用户“用户ID”;,c#,entity-framework,C#,Entity Framework,我不明白这为什么会导致EF错误:在EF中保存时列名“User\u UserId”无效 这是我的模型: [DataContract(IsReference = true)] public class User { [Key] [DataMember] public virtual Guid UserId { get; set; } [DataMember] public virtual string Username { get; set; }

我不明白这为什么会导致EF错误:在EF中保存时列名“User\u 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; }
}
[DataContract(IsReference=true)]
公共类用户
{
[关键]
[数据成员]
公共虚拟Guid用户标识{get;set;}
[数据成员]
公共虚拟字符串用户名{get;set;}
[数据成员]
公共虚拟字符串密码{get;set;}
[数据成员]
公共虚拟字符串电子邮件{get;set;}
[数据成员]
公共虚拟ICollection好友列表{get;set;}
}
[DataContract(IsReference=true)]
公开课友人名单
{
[关键]
[数据成员]
公共虚拟Guid FriendListId{get;set;}
[数据成员]
[外键(“用户”)]
公共虚拟Guid用户标识{get;set;}
[数据成员]
公共虚拟用户用户{get;set;}
[数据成员]
[ForeignKey(“FriendUser”)]
公共虚拟Guid FriendUserId{get;set;}
[数据成员]
公共虚拟用户FriendUser{get;set;}
}
基本上,它与拥有好友列表的用户之间是一对多的关系。

我猜:

1) 您案例中的属性ForeignKey必须设置为
[ForeignKey(“用户ID”)]
,而不是
[ForeignKey(“用户”)]

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

好友列表
类中,您有两个类型为
User
的导航属性。EF无法确定这些属性中哪些属于
用户。FriendLists
然后为所有三个导航属性创建一个单独的一对多关系,其中一个具有默认外键名
User\u UserId

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

public class FriendList
{
    // ...

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

    // ...
}

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

您的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; }

至少它对我有用。

感谢您对端点和EF属性解决方案的清晰解释。谢谢。