我们已经构建了一个REST API服务,我们目前在Android和iOS应用程序中使用它。为了存储数据,我们使用Entity Framework。在此API中,您可以创建一个帐户,并且您还可以将其他用户添加为您的朋友。我们在将其他用户添加为朋友时遇到问题。
这是方案: 用户A将用户B添加为朋友,这是有效的。 用户C将用户B添加为朋友,这是有效的,尽管现在用户A已经从他的朋友列表中丢失了用户B.
问题: 这里的问题是用户A失去了用户B作为朋友,这是我们试图解决的问题。我们完全不知道为什么甚至用户A如何从他的朋友列表中失去用户B作为他的朋友。我们都是Entity Framework的新手,据说我们对它的经验很少。
我们今天所处的位置:
我们有User
的模型,在此模型中,我们有一个List<User> friends
,其中包含其他用户。我们的想法是将用户添加到此列表中。有关说明:列表的用户类型与包含此列表的整个类用户相同。换句话说,我们将其他用户添加到我们自己的用户列表中。在下面的第二个代码示例中,我们通过用户名
User friend = db.Users.Single(i => i.userName == newFriend.userName);
。
当前用户
User user = db.Users.Include("Friends").Single(i => i.userName == currentUser);
将用户friend
添加到他自己的好友列表中。
这是用户的模型:
public class User
{
[Key]
public int id { get; set; }
[Index(IsUnique = true)]
[StringLength(50)]
[Required]
public string userName { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string email { get; set; }
public List<Vacation> vacations { get; set; }
public List<User> friends { get; set; }
}
这是将用户添加为好友的代码:
using (var db = new ProjectDbContext())
{
User friend = db.Users.Single(i => i.userName == newFriend.userName);
User user = db.Users.Include("Friends").Single(i => i.userName == currentUser);
if (friend != user)
{
if (!user.friends.Contains(friend))
{
user.friends.Add(friend);
db.SaveChanges();
return Ok("Friend added.");
}
else
return BadRequest("Friend already exists.");
}
else
return BadRequest("You cannot add yourself as a friend.");
}
我希望我用足够的细节解释这一点,有人能够帮助我们解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:0)
我们通过简单的代码行解决了我们的问题,该代码行进入了DBcontext文件。我们确实覆盖了函数OnModelCreating
并添加了一行代码,当使用相同模型的外键时,它会启用多对多关系。这是代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().HasMany(u => u.friends).WithMany();
}