2012-03-21 1 views
0

У меня есть метод, который обновляет объект ReportRecipient в EF. Примитивы работают нормально; возникает головная боль при попытке управлять отношениями M2M с объектами RecipientGroups.EF many-to-many madness

Пожалуйста, обратите внимание на этот код:

public IReportRecipient ModifyRecipientWithGroupAssignments(IEnumerable<Guid> groupIds, IReportRecipient recipient) 
    { 
     var entity = Context.ReportRecipients 
      .Include("RecipientGroups") 
      .FirstOrDefault(e => e.ReportRecipientId == recipient.ReportRecipientId) 
      .FromIReportRecipient(recipient); 

     var toRemove = entity.RecipientGroups 
      .Where(e => !groupIds.Contains(e.GroupId)) 
      .ToList(); 

     //remove group assignments that no longer apply 
     foreach (var group in toRemove) 
     { 
      if (group != null) 
      { 
       entity.RecipientGroups.Attach(group); 
       entity.RecipientGroups.Remove(group); 
      } 
     } 

     var toAdd = entity.RecipientGroups 
      .Where(e => groupIds.Contains(e.GroupId)) 
      .ToList(); 

     //add new groups that weren't there before 
     foreach (var group in toAdd) 
     { 
      if (group != null) 
      { 
       entity.RecipientGroups.Attach(group); 
      } 
     } 

     return entity; 
    } 

... моя проблема на var ToAdd... линии. Даже если у меня есть набор гидов в groupIds, которые соответствуют Guids, представляющим RecipientGroup объектов в базе данных, toAdd всегда оценивает пустую коллекцию. Я бы подумал, что функция Contains() будет работать для этого сценария; может кто-нибудь объяснить, если я делаю что-то неправильно?

ответ

1

Вы должны загрузить RecipientGroup S вы хотите добавить из базы данных (Context.RecipientGroups я думаю), а не из коллекции вы хотите добавить их (entity.RecipientGroups в примере кода).

+0

Doh! Я идиот. Благодарю. –