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

问题描述:

我们已经构建了一个REST API服务,我们目前在Android和iOS应用程序中使用它。要存储我们使用实体框架的数据。在此API中,您可以创建一个帐户,并且您也可以将其他用户添加为您的朋友。我们在添加其他用户成为朋友时遇到问题。实体框架:自己的modeltype列表删除其他条目

这是场景: 用户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

你能分享DB结构吗? – 2015-11-02 12:12:28

+0

你是这个意思吗? 'CREATE TABLE [DBO]。[用户]( [用户名] NVARCHAR(50)NOT NULL, [名字] NVARCHAR(MAX)NULL, [姓氏] NVARCHAR(MAX)NULL, [电子邮件] NVARCHAR( MAX)NULL, [ID] INT IDENTITY(1,1)NOT NULL, [USER_ID] INT NULL, 约束[PK_dbo.Users] PRIMARY KEY CLUSTERED([ID] ASC), 约束[FK_dbo.Users_dbo.Users_User_id ] FOREIGN KEY([User_id])REFERENCES [dbo]。[Users]([id]) );' – CptSeasick

+0

EF中的子集合很棘手。看到这篇文章。 http://*.com/questions/27176014/how-to-add-update-child-entities-when-updating-a-parent-entity-in-ef –

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

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

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