Как удалить объекты в MVC / Entity Framework: невозможно удалить объект, потому что он не был найден в ObjectStateManager - PullRequest
3 голосов
/ 23 марта 2011

Я получаю сообщение об ошибке при попытке удалить пользователя и связанные с ним объекты.Сообщение об ошибке: Объект не может быть удален, поскольку он не был найден в 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");
    }

REPOSITORY

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

Я что-то упустил?

1 Ответ

5 голосов
/ 23 марта 2011

Как выглядит ваш код для _userRepository.GetByUserName(UserName)?

Мне кажется, что вы получаете пользователя из одного контекста и пытаетесь удалить из другого.

Например

User myUser = null;

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

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

2-ые "данные" не знают об этом пользователе, потому что он не получил их.вам нужно что-то вроде

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

Синтаксис может быть не совсем правильным, но по сути вам нужно установить, что ваш пользовательский объект является сущностью в этом контексте данных, а его состояние удалено.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...