it-swarm.com.de

Das Objekt kann nicht gelöscht werden, da es nicht im ObjectStateManager gefunden wurde

Ich habe diesen Code, der normalerweise funktioniert:

db.myTable.DeleteObject(myCurrent);

Und ich habe diesen Fehler bekommen:

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

Dieselben Zutaten IS in der Tabelle in der Datenbank.

Ich habe das versucht:

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

Und ich habe einen anderen Fehler bekommen: 

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

Wie kann ich das beheben?

20
petko_stankoski

Die andere Antwort hat nicht funktioniert, also habe ich sie behoben.

Zuvor hatte ich:

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

}

Ich habe es damit behoben:

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

}
9
petko_stankoski

Das Problem ist, dass Sie getrennte Entitäten nicht löschen (oder entfernen) können und keine Entität zweimal verknüpfen können. Sie brauchen so etwas wie unten.

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

wenn Sie gerade ein Modell von der Bearbeitungs- oder Löschansicht per Post erhalten oder es selbst erstellt haben, kennt EF es nicht. Daher setzen Sie den Status auf "Gelöscht" (oder EntityState.Modified usw.), um EF durch folgende Informationen zu informieren:

//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();
10
Moji

Obwohl diese Frage eine alte Frage ist, kann sie anderen Leuten mit dem gleichen Fehler helfen, 

In meinem Fall bestand das Problem darin, dass ich Daten AsNoTracking abholte, indem ich AsNoTracking entfernte. 

3
Beyto

In meinem Fall habe ich versucht, ein Objekt zu löschen, das nicht aus der Datenbanktabelle "Student" abgerufen wird . Falscher Weg, um ein Objekt zu löschen:

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

Also kümmere dich darum. Das zu löschende Objekt sollte aus der Tabelle stammen

1
garish

Ich habe hier eine Antwort gefunden:

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

Hier ist die "getrennte" Version, die ich brauchte;

       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();
        }
1
granadaCoder

Ich hatte das gleiche Problem. In meinem Fall hatte ich zwei verschiedene DBContext-Instanzen zum Abrufen von Daten und zum Aktualisieren/Entfernen verwendet. Dann habe ich die gleiche Instanz für alle DB-Aktionen in demselben Codeblock/Methode/Klasse verwendet, dann das Problem gelöst

0
smoothumut