C# EF 4.1代码第一个无效列名“;用户“用户ID”;
我不明白这为什么会导致EF错误:在EF中保存时列名“User\u UserId”无效 这是我的模型: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; }
[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属性解决方案的清晰解释。谢谢。