无法删除对象,因为在ObjectStateManager中没有找到.处理步骤

本文关键字:处理 ObjectStateManager 删除 对象 因为 | 更新日期: 2023-09-27 18:08:31

我有这个正常工作的代码:

db.myTable.DeleteObject(myCurrent);

我得到了这个错误:

The object cannot be deleted because it was not found in the ObjectStateManager.

相同的成分在数据库的表中。

我试过了:

db.myTable.Attach(myCurrent);
db.myTable.DeleteObject(myCurrent);

我得到了另一个错误:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 

如何解决这个问题?

无法删除对象,因为在ObjectStateManager中没有找到.处理步骤

问题是您不能删除(或删除)分离的实体,也不能附加一个实体两次。你需要如下所示:

var entry = db.Entry(myCurrent);
if (entry.State == EntityState.Detached)
    db.myTable.Attach(myCurrent);
db.myTable.Remove(myCurrent);

如果您只是通过post从编辑或删除视图接收模型或自己生成模型,那么EF不知道它,因此您将其状态设置为"已删除"(或EntityState)。修改等)通知EF:

//generate it yourself if not posted from edit/delete view
//var model = new Model { Id = 123 };
//set to delete
db.Entry(model).State = EntityState.Deleted; // or EntityState.Modified for edit etc.
db.SaveChanges();

另一个答案不起作用,所以我是这样解决的。

之前我有:

public void ok(myTable myCurrent)
{
    //delete entries from other tables in relationship with myTable
    db.myTables.DeleteObject(myCurrent);
}

我用这个修复它:

public void ok(int current_id)
{
    //delete entries from other tables in relationship with myTable
    var y = (from x in db.myTables where x.id == current_id select x).First();
    db.myTables.DeleteObject(y);
}

虽然这个问题是一个老问题,但它可能会帮助其他有同样错误的人,

在我的情况下,问题是我获取数据AsNoTracking,通过删除AsNoTracking它解决了。

我在这里找到了答案:

http://www.entityframeworktutorial.net/delete-entity-in-entity-framework.aspx

这是我需要的"未连接"版本;

       Student stud = null;
        using (SchoolDBContext ctx = new SchoolDBContext())
        {
            stud = (from s in ctx.Students
                    where s.StudentName == "Student1"
                        select s).FirstOrDefault();
        }
        using (SchoolDBContext newCtx = new SchoolDBContext())
        {
            newCtx.Students.Attach(stud);
            newCtx.Students.DeleteObject(stud);
            //you can use ObjectStateManager also
            //newCtx.ObjectStateManager.ChangeObjectState(stud, 
                                    System.Data.EntityState.Deleted);
            int num = newCtx.SaveChanges();
        }

在我的情况下,我试图删除未从数据库表"Student"中获取的对象。删除对象的错误方法:

var objStudent= new Student();db.Student.Remove (objStudent);

注意这个。要删除的对象应该来自表

我也遇到了同样的问题。在我的例子中,我一直使用两个不同的DBContext实例来检索数据和更新/删除。然后,我在相同的代码块/方法/类中使用了相同的db操作实例,然后问题解决了

我在这里找到了答案。我也试过它的工作:

dbEntities.Entry(CurrentObj).State = EntityState.Deleted;                
dbEntities.SaveChanges();