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

pet*_*ski 20 .net c# entity-framework

我有这个代码通常工作:

db.myTable.DeleteObject(myCurrent);
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

The object cannot be deleted because it was not found in the ObjectStateManager.
Run Code Online (Sandbox Code Playgroud)

数据库中的表中包含相同的成分.

我试过这个:

db.myTable.Attach(myCurrent);
db.myTable.DeleteObject(myCurrent);
Run Code Online (Sandbox Code Playgroud)

我又得到了一个错误:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

Meh*_*taş 26

问题是您无法删除(或删除)分离的实体,也无法附加实体两次.你需要像下面这样的东西.

var entry = db.Entry(myCurrent);
if (entry.State == EntityState.Detached)
    db.myTable.Attach(myCurrent);
db.myTable.Remove(myCurrent);
Run Code Online (Sandbox Code Playgroud)


Moj*_*oji 10

如果您刚刚通过邮件接收模型或删除视图或自己生成模型,那么EF不知道它,因此您将其状态设置为"已删除"(或EntityState.Modified等)以通知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();
Run Code Online (Sandbox Code Playgroud)


pet*_*ski 9

另一个答案没有用,所以这就是我修复它的方法.

以前我曾经:

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

}
Run Code Online (Sandbox Code Playgroud)

我修好了这个:

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);

}
Run Code Online (Sandbox Code Playgroud)