How to delete objects in MVC / Entity Framework: an object cannot be deleted because it was not found in ObjectStateManager

I get an error when trying to delete a user and related objects. Error message The object cannot be deleted because it was not found in the ObjectStateManager.

CONTROLLER

[Authorize, HttpPost]
    public ActionResult DeleteUser(string UserName)
    {
        User user = _userRepository.GetByUserName(UserName);

        if (user == null)
            return new FileNotFoundResult();

        _repository.DeleteUser(user);

        return RedirectToAction("Index");
    }

STORAGE

public void DeleteUser(User user)
            {            
                foreach (Follower follower in user.Followers)
                    _db.Followers.DeleteObject(follower);

                foreach (Comment comment in user.Comments.ToList())
                    _db.Comments.DeleteObject(comment);   

                _db.Users.DeleteObject(user);
            }

Did I miss something?

+3
source share
1 answer

What does your code look like for _userRepository.GetByUserName(UserName)?

It seems to me that you get the user from one context and are trying to remove from another.

eg.

User myUser = null;

using(MyData data = new MyData())
{
    myUser = data.GetUserById(1);
}

using(MyData data = new MyData())
{
    data.DeleteUser(myUser);
}

The 2nd “data” does not know about this user because he did not retrieve it.

Instead, you need something like

using(MyData data = new MyData())
{
    data.Context.Entry(myUser).State = EntityState.Deleted;
    data.SaveChanges();
}

, , "".

- , ( EntityState.Modified)

+5

All Articles