无法删除对象,因为在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.
如何解决这个问题?
问题是您不能删除(或删除)分离的实体,也不能附加一个实体两次。你需要如下所示:
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();