在我们的 EF 和 POCO 首次设置中,我们有一个 IRepository 模式非常适合我们。但是,我们遇到了一个奇怪的问题,即“集合已修改;枚举操作可能无法执行”。
基本上我们有一个带有 ObjectSet 的存储库,如下所示:
protected IObjectSet<T> ObjectSet
{
get
{
if (_objectSet == null)
{
_objectSet = this.Context.CreateObjectSet<T>();
}
return _objectSet;
}
}
以及 IRepository 类上的删除方法,其实现如下:
public void Delete(T entity)
{
ObjectSet.DeleteObject(entity);
}
这一切都非常简单,到目前为止我们还没有遇到任何问题,但是每当我们尝试删除集合的对象时,都会出现此错误。如果我在删除方法上放置一个断点,将鼠标悬停在 ObjectSet 上并展开结果以便全部加载,那么 DeleteObject 工作正常,但如果所有项目都没有从 ObjectSet 加载,它会失败并出现集合修改错误。
我设置了一个不使用 POCO 或 IRepository 的测试平台,它工作正常,所以基本上有一些我很明显遗漏的东西。我们非常深入地在多个项目中使用这种模式,人们一直在努力解决它,而不是试图修复它,我认为这不是一个选择。
非常感谢您的帮助或见解。
编辑:
这很奇怪,但是当我从模型中删除某些实体时,这个错误消失了,但是我们有一个巨大的模型,我无法追踪它,因为我首先删除了除了删除中的特定表之外的所有内容。以前有没有人遇到过这种情况,我们正在使用继承表(每种类型),但我无法证明这是问题所在。
第二次编辑:
好的,我从模型中删除了除了每个类型继承实体的表之外的所有内容,并且当我删除除一个派生类型之外的所有类型并尝试从中删除它时,错误发生了。所以我的问题是,在使用每个类型继承的表时,还有其他人遇到过这个问题吗?