【发布时间】:2012-05-05 15:24:09
【问题描述】:
在我们的 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 的测试平台,它工作正常,所以基本上我确实缺少一些非常明显的东西。我们非常深入地在多个项目中使用这种模式,人们一直在努力解决它,而不是试图修复它,我认为这不是一个选择。
非常感谢您的帮助或见解。
编辑:
这很奇怪,但是当我从模型中删除某些实体时,此错误消失了,但我们有一个巨大的模型,我无法追踪它,因为我首先删除了除删除中的特定表之外的所有内容。以前有没有人遇到过这种情况,我们正在使用继承表(每种类型),但我无法证明这是问题所在。
第二次编辑:
好的,我从模型中删除了除每个类型继承实体的表之外的所有内容,当我删除除一个派生类型以外的所有类型并尝试从中删除它时,错误发生了。所以我的问题是,在使用每个类型继承的表时,还有其他人遇到过这个问题吗?
【问题讨论】:
-
您有任何与级联相关的实体吗?我多次使用 TPT 和 POCO 没有任何问题。
-
我已经提交了连接一个复制问题的测试平台。看看我得到了什么。我之前使用 TPT 也没有遇到过这个问题,所以这可能不是直接的问题。 connect.microsoft.com/VisualStudio/feedback/details/740754/…
标签: entity-framework poco irepository