2

私は言った例外を得ました:

ObjectStateManager で見つからなかったため、オブジェクトを削除できません

ループDeleteObject()で呼び出すとき。ForEachこの質問をグーグルで検索した後、まだ答えを見つけることができませんでした。以下のコードに問題はありませんでした。

と の間には 1 対多の関係がDHEntityありDHEntityVersionます。

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.
        }
    }
}
4

1 に答える 1

3

問題は、オブジェクトが別のデータ コンテキストからのものであることです。

GetAllDHEntityアイテムを取得するために使用されるContextは、それに対するDeleteものではありません。そのため、そのオブジェクトの状態は存在しません。

于 2013-01-23T03:09:31.337 に答える