实体框架4.1代码优先自引用一对多和多对多关联
题
我有一个用户可以收集他喜欢的用户...
另一个用户可以收集他喜欢的用户....
如果用户a喜欢用户b,如果用户b喜欢用户a,那么他们可以挂出。我需要互相发送他们的联系信息。我们如何首先在实体框架代码中代表这样的模型?
public class User
{
public int UserId { get; set; }
public int? UserLikeId { get; set; }
public virtual UserLike UserLike { get; set; }
}
public class UserLike
{
public int UserLikeId { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
public virtual ICollection<User> LikeUsers { get; set; }
}
.
是这个模型是否正确?我无法做到这一点。
我已经尝试了另一种方式,但这不起作用...
我试图将用户的集合添加到用户表。
为前:
public virtual ICollection<User> userlike { get; set; }
public class User
{
public int UserId { get; set; }
public virtual ICollection<UserLike> UserLikes { get; set; }
}
public class UserLike
{
public int UserLikeId { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
public int LikeUserId { get; set; }
public virtual User LikeUser { get; set; }
}
.
当我尝试添加用户时收到此错误以及它们喜欢的谁:
已检测到关系'userlike_likeuser'的角色'userlike_likeuser_target'的冲突更改。
代表这种型号的最佳方法是什么?
解决方案
您实际上并不需要一个单独的实体来描述这种关系,下面的对象模型可以解决这个问题: 通用标签
现在,假设您手中有一个UserId,并希望找到另一个喜欢该用户的用户,而该用户也喜欢他: 通用标签
更新1:
将使用连接表将自引用多对多关联映射到数据库,该连接表需要不同的对象模型和流利的API: 通用标签
更新2:
正如我在此帖子,多对多关联不能具有有效负载(例如EventId),如果是这种情况,则必须将其分解为两个中间类的一对多关联,我可以看到您已经正确创建了该类(UserLike),以表示附加到自引用多对多关联上的额外信息,但是该中间类的关联是不正确,因为我们需要准确定义从UserLike到User的2个多对一关联,如我在以下对象模型中所示: 通用标签
现在,您可以使用以下LINQ查询来检索彼此喜欢的所有用户: 通用标签
希望这会有所帮助。
不隶属于 StackOverflow