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)
另一个答案没有用,所以这就是我修复它的方法.
以前我曾经:
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)