实体框架:自己的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.");
}
我希望我有足够的详细解释这一点,有人能够帮助我们解决这个问题。任何帮助表示赞赏。
我们通过一段简单的代码进入DBContext文件解决了我们的问题。我们确实覆盖了函数OnModelCreating
并添加了一行代码,该代码在使用同一模型的外键时启用了多对多关系。这是代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().HasMany(u => u.friends).WithMany();
}
你能分享DB结构吗? – 2015-11-02 12:12:28
你是这个意思吗? '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
EF中的子集合很棘手。看到这篇文章。 http://*.com/questions/27176014/how-to-add-update-child-entities-when-updating-a-parent-entity-in-ef –