我无法弄清楚为什么会导致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; }
}
基本上,它与有朋友列表的用户有一对多的关系。
答案 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; }
至少它对我有用。