21

私は通常動作するこのコードを持っています:

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. 

これを修正する方法は?

4

8 に答える 8

27

問題は、切り離されたエンティティを削除 (または除去) できず、エンティティを 2 回アタッチできないことです。以下のようなものが必要です。

var entry = db.Entry(myCurrent);
if (entry.State == EntityState.Detached)
    db.myTable.Attach(myCurrent);
db.myTable.Remove(myCurrent);
于 2013-04-11T10:33:35.173 に答える
10

他の答えはうまくいかなかったので、これが私がそれを修正した方法です。

以前は:

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

}
于 2013-04-16T08:13:02.777 に答える
4

この質問は古い質問ですが、同じエラーで別の人を助けるかもしれませんが、

私の場合、問題は AsNoTracking を削除することでデータをフェッチしたことでした。

于 2015-12-21T14:15:40.810 に答える
1

ここで答えを見つけました:

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();
        }
于 2014-01-16T22:37:54.913 に答える
0

私も同じ問題を抱えていました。私の場合、データの取得と更新/削除に 2 つの異なる DBContext インスタンスを使用していました。次に、同じコードブロック/メソッド/クラスのすべての db アクションに同じインスタンスを使用し、問題を解決しました

于 2016-10-05T09:50:46.467 に答える