实体框架:自己的模型类型列表删除其他条目

时间:2015-11-02 12:07:31

标签: entity-framework list

我们已经构建了一个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.");
}

我希望我用足够的细节解释这一点,有人能够帮助我们解决这个问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我们通过简单的代码行解决了我们的问题,该代码行进入了DBcontext文件。我们确实覆盖了函数OnModelCreating并添加了一行代码,当使用相同模型的外键时,它会启用多对多关系。这是代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<User>().HasMany(u => u.friends).WithMany(); 
}