[英]EF many-to-many madness
我有一种更新EF中的ReportRecipient
对象的方法。 原语可以正常工作; 当尝试使用RecipientGroups
对象管理M2M关系时,头痛就来了。
请看下面的代码:
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...
行上。 即使我的GUID在收集groupIds
匹配代表的GUID是RecipientGroup
数据库中的对象, toAdd
始终计算为一个空的集合。 我认为Contains()
函数适用于这种情况; 有人可以解释我做错了什么吗?
您应该从数据库中加载要添加的RecipientGroup
(我猜是Context.RecipientGroups
),而不是从要添加它们的集合中加载(代码示例中的entity.RecipientGroups
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.