2016-04-01 48 views
0

我有一個Conversation表,它具有列表Users作爲列,以及列表Messages和其他一些數據。使用實體框架從對話中刪除用戶

我期待Conversation表中刪除一個User,而不刪除UserConversation一起,因爲他們可能在別處使用。

我不知道如何做到這一點?

我要做到這一點使用一個的LINQ查詢,但我在嘗試創建查詢沒有成功。

任何幫助將不勝感激!

[HttpPut] 
//[ResponseType(typeof(Conversation))] 
public async Task<IHttpActionResult> RemoveUserFromGroup(String key, User user) 
{ 
    Conversation conver = await db.Conversations.FindAsync(key); 

    if (conver == null) 
    { 
      return NotFound(); 
    } 

    IEnumerable<User> del = from d in conver.Users 
          where d.Email == user.Email 
          select d; 

    conver.Users.Remove(del); // ERROR ON THIS LINE AT "del" 

    await db.SaveChangesAsync(); 

    return Ok(conver); 
} 

這段代碼不會做我想做的它然而

Conversation類:

[DataContract] 
public class Conversation 
{ 
    [Key] 
    [DataMember] 
    public string Key { get; set; } 

    [DataMember] 
    public string ConversationName { get; set; } 

    [DataMember] 
    public string Administrator { get; set; } 

    [DataMember] 
    public virtual ICollection<User> Users { get; set; } 

    [DataMember] 
    public virtual ICollection<Message> Messages { get; set; } 

    public Conversation() 
    { 
     Users = new HashSet<User>(); 
    } 
} 

User類:

[DataContract] 
public class User 
{ 
    [Key] 
    [DataMember] 
    public string Email { get; set; } 

    [DataMember] 
    public string Password { get; set; } 

    [DataMember] 
    public bool Admin { get; set; } 

    [DataMember] 
    public virtual ICollection<Conversation> Conversations { get; set; } 

    public User() 
    { 
     Conversations = new HashSet<Conversation>(); 
    } 
} 
+0

我們能否看到您的代碼示例? – Timmoth

+0

如果它具有可爲空的鍵,即它不是必需的關係,那麼您可以簡單地加載實體並將UserID屬性爲空,然後保存該實體並將用戶移除。如果你可以發佈你的代碼,這將有所幫助。 –

+0

@JamesDev關係不是必需的。所以我可以檢索用戶並將其電子郵件(PK)設置爲空? – semiColon

回答

0
[HttpPut] 
public async Task<IHttpActionResult> RemoveUserFromGroup(String key, [FromBody]User user) 
{ 
    Conversation conver = await db.Conversations.FindAsync(key); 
    if (conver == null) 
    { 
      return NotFound(); 
    } 

    IEnumerable<User> del = from d in conver.Users 
          where d.Email == user.Email 
          select d; 

    conver.Users.Remove(del.ToList()[0]); 

    await db.SaveChangesAsync(); 
    return Ok(conver); 
} 

該解決方案固定問題!它將適當地從指定組中刪除指定用戶的用戶。