2015-11-02 62 views
1

我們已經構建了一個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://stackoverflow.com/questions/27176014/how-to-add-update-child-entities-when-updating-a-parent-entity-in-ef –

回答

0

我們通過一段簡單的代碼進入DBContext文件解決了我們的問題。我們確實覆蓋了函數OnModelCreating並添加了一行代碼,該代碼在使用同一模型的外鍵時啓用了多對多關係。這是代碼:

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

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