2016-04-01 12 views
0

Conversation tablosunda bir sütun olarak, Messages ve diğer bazı verilerin yanı sıra bir sütun olarak Users listesi vardır.Varlık Çerçevesi ile Görüşmeden Bir Kullanıcıyı Silme

Ben için arıyorum onlar başka yerde kullanılabilecek şekilde tamamen User veya Conversation silmeden, Conversation tablodan bir User kaldırın.

Ben Linq sorgu kullanarak bunu yapmak isteyen ama sorgu oluşturmak için benim girişimleri başarısız olmuştur

... Bunun nasıl emin değilim.

Herhangi bir yardım çok takdir edilecektir!

[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); 
} 

Bu kod parçası ne istiyorum yapmaz bunu ancak

Conversation sınıfı için:

[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 sınıfı:

[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

Kodunuzun bir örneğini görebilir miyiz lütfen? – Timmoth

+0

Bir null anahtar varsa, bu gerekli bir ilişki değil, o zaman sadece varlık yükleyebilir ve UserID özelliğini sıfırlayabilir ve sonra varlık kaydedebilirsiniz ve kullanıcı kaldırılacaktır. Kodunuzu gönderebilirseniz yardımcı olur. –

+0

@JamesDev İlişki gerekli değil .. Bu yüzden Kullanıcıyı geri alabilir ve e-postasını (PK) boş olarak atayabilir miyim? – semiColon

cevap

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); 
} 

Bu solüsyon sabit sorun! Bir kullanıcıyı belirtilen bir Kullanıcıdan belirli bir gruptan uygun şekilde kaldıracak.