我有一个'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);
答案 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
。只是一个想法,不确定它是否有效。