У меня есть метод, который обновляет объект 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()
будет работать для этого сценария; может кто-нибудь объяснить, если я делаю что-то неправильно?
Doh! Я идиот. Благодарю. –