【问题标题】:Delete object in foreach在foreach中删除对象
【发布时间】:2013-01-23 02:57:08
【问题描述】:

我得到了一个例外,它说:

无法删除对象,因为它在 ObjectStateManager 中找不到

当我在 ForEach 循环中调用 DeleteObject() 时。在谷歌搜索这个问题后,我还没有找到答案,我没有发现我的代码有什么问题,如下。

DHEntityDHEntityVersion 之间存在一对多关系。

public IList<DHEntity> GetAllDHEntity(Guid packId)
{
    using (DiaDataContext db = new DiaDataContext(ConnectionStrings.LogDB))
    {
        var subPackList = new List<DHEntity>();
        subPackList = db.DHEntities.Include(d=>d.DHEntityVersions).Where(p => p.PackageId == packId).ToList();
        return subPackList;
    }
}

private void Delete()
{
    using (DiaDataContext db = new DiaDataContext(ConnectionStrings.LogDB))
    {
        var subPacks = GetAllDHEntity(packId);////This method used another context. maybe it is the reason cause the problem .
        foreach (var subpack in subPacks)
        {
            var vList = db.DHEntityVersions.Where(v =>v.DHEntityId == subpack.ID).ToList();
            foreach (var version in vList)
            {
                db.DeleteObject(version);
            }
            db.DeleteObject(subpack);//the debugger stop here along with the exception I mentioned before.
        }
    }
}

【问题讨论】:

    标签: c# .net entity-framework entity-framework-4 linq-to-entities


    【解决方案1】:

    问题是对象来自另一个数据上下文。

    用于获取项目的上下文GetAllDHEntity 不是Delete 它的上下文,这就是该对象的状态不存在的原因。

    【讨论】:

      猜你喜欢
      • 2018-03-18
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 2011-01-19
      相关资源
      最近更新 更多