【问题标题】:POCO Entity Framework 4 With IRepository Pattern Collection Was Modified Error on Delete带有 IRepository 模式集合的 POCO Entity Framework 4 在删除时被修改错误
【发布时间】: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


【解决方案1】:

这是实体框架中的错误。根据连接在 4.5 中修复。

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2011-12-28
    • 1970-01-01
    • 2023-04-05
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多