我有一个用户可以收集他喜欢的用户...

另一个用户可以收集他喜欢的用户....

如果用户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查询来检索彼此喜欢的所有用户: 通用标签

希望这会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top