繁体   English   中英

EF多对多疯狂

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM