需要帮助更新EF4中的多对多关系

时间:2011-08-08 20:27:37

标签: entity-framework entity-framework-4 many-to-many

我有一个'EnterpriseEntity'和'TagsEntity',它们在表格中有多对多的关系 这个关系表称为'EnterpriseTag',只存储EnterpriseID和TagID。

我担心的是用EF4更新它。我编写以下代码:

   
    //Delete old tags
    foreach(var oldTag in e.Tags.ToList())
    {
    _enterpriseRepository.dbContext.DeleteObject(oldTag);
    }

    //now insert the new ones, this may have elements from old tag list
    foreach(var newTag in newTags)
    {
    e.Tags.Add(newTag);
    }

如您所见,newTags列表可能包含旧标记列表中的元素,但我不想空闲时间按标记检查该标记。

但是当我调用.Savechanges()时,我得到以下异常:

  

与处于Deleted状态的实体添加关系是   不允许。

更新 在我的原始代码中,我有:

   
//This delete the Tag object, and i just want to delete the relation
    _enterpriseRepository.dbContext.DeleteObject(oldTag);

正确的方法:

   
//this just delete the relation, not the tag
    e.Tags.Remove(oldTag);

1 个答案:

答案 0 :(得分:1)

我会尝试这样的事情:

var oldTags = e.Tags.ToList();

foreach(var oldTag in oldTags.Except(newTags))
{
    _enterpriseRepository.dbContext.DeleteObject(oldTag);
}

foreach(var newTag in newTags.Except(oldTags))
{
    e.Tags.Add(newTag);
}

我假设newTags集合中的旧标记是相同的对象实例。如果它们按实体键相同,则必须为IEqualityComparer实施Except。只是一个想法,不确定它是否有效。