entity framework类中的两个相同的类类型问题

我正在实现允许用户互相关注的function。 我有数据库表:

User{UserId, FirstName, LastName etc.} Followings{FollowerUserId, FollowingUserId, CreatedOnDate etc.} 

所以我添加了EF类:

 public class Follow { [Key, Column(Order = 1)] public Guid FollowerUserId { get; set; } [Key, Column(Order = 2)] public Guid FollowUserId { get; set; } public DateTime CreatedOnDate { get; set; } public virtual User Follower { get; set; } public virtual User Following { get; set; } } 

最后两个虚拟属性问题。 我打电话的时候:

 var model = con.Follows.Where(x => x.FollowerUserId == uid); 

我得到以下exception:

 Invalid column name 'Following_UserId'. 

该问题可能是由于一个类中有两个User对象引起的。 知道如何解决这个问题吗?
UPDATE

 public class User { public Guid UserId { get; set; } ... public virtual ICollection Following { get; set; } public virtual ICollection Followers { get; set; } } 

我认为原因是外键属性( FollowerUserIdFollowUserId )和导航属性( FollowerFollowing )不遵守命名约定,因此EF无法将第一个属性识别为外键。 您可以通过使用[ForeignKey]属性显式指定FK属性来解决问题:

 public class Follow { [Key, Column(Order = 1), ForeignKey("Follower")] public Guid FollowerUserId { get; set; } [Key, Column(Order = 2), ForeignKey("Following")] public Guid FollowUserId { get; set; } public DateTime CreatedOnDate { get; set; } public virtual User Follower { get; set; } public virtual User Following { get; set; } } 

编辑

至少第二个属性不遵守命名约定,第一个属性看起来没问题。 因此,您也可以通过将第二个FK属性FollowUserId重命名为:

 public Guid FollowingUserId { get; set; } 

…因为导航属性被称为Following

编辑2

关于您的更新:您需要添加[InverseProperty]属性以告知EF哪些导航属性属于一起:

 public class Follow { [Key, Column(Order = 1), ForeignKey("Follower")] public Guid FollowerUserId { get; set; } [Key, Column(Order = 2), ForeignKey("Following")] public Guid FollowUserId { get; set; } public DateTime CreatedOnDate { get; set; } [InverseProperty("Followers")] // refers to Followers in class User public virtual User Follower { get; set; } [InverseProperty("Following")] // refers to Following in class User public virtual User Following { get; set; } }