Подтвердить что ты не робот

Объект нельзя удалить, поскольку он не найден в ObjectStateManager

У меня есть этот код, который обычно работает:

db.myTable.DeleteObject(myCurrent);

И я получил эту ошибку:

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

Те же ингредиенты IS в таблице в базе данных.

Я пробовал это:

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

И я получил еще одну ошибку:

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

Как это исправить?

4b9b3361

Ответ 1

Другой ответ не сработал, так вот как я его исправил.

Раньше у меня было:

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

}

Ответ 2

Проблема заключается в том, что вы не можете удалить (или удалить) отдельные объекты и не можете присоединить объект дважды. Вам нужно что-то вроде ниже.

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

Ответ 3

Если вы только что получили модель от редактирования или удаления представления по почте или сгенерировали ее самостоятельно, тогда 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();

Ответ 4

Хотя этот вопрос старый вопрос, но он может помочь другим людям с одинаковой ошибкой,

В моем случае проблема была в том, что я выбрал данные AsNoTracking, удалив AsNoTracking, он решил.

Ответ 5

Я нашел ответ здесь:

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

Ответ 6

В моем случае я пытался удалить объект, который не извлекается из таблицы базы данных "Студент". Неверный способ удаления объекта:

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

Так что позаботься об этом. Объект для удаления должен поступать из таблицы

Ответ 7

У меня была та же проблема. В моем случае я использовал два разных экземпляра DBContext для извлечения данных и обновления/удаления. Затем я использовал один и тот же экземпляр для всех действий db в том же кодебло/методе/классе, затем проблема решена