【问题标题】:How to delete objects in MVC/Entity Framework: The object cannot be deleted because it was not found in the ObjectStateManager如何在 MVC/Entity Framework 中删除对象:无法删除该对象,因为它在 ObjectStateManager 中找不到
【发布时间】:2011-03-23 02:22:58
【问题描述】:

我在尝试删除用户和关联对象时收到错误消息。错误信息是无法删除对象,因为它在 ObjectStateManager 中找不到。

控制器

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

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

        _repository.DeleteUser(user);

        return RedirectToAction("Index");
    }

存储库

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

我错过了什么吗?

【问题讨论】:

  • 您从_userRepository 获取用户,但使用_repository 将其删除。是错字吗?

标签: c# .net asp.net-mvc linq-to-sql entity-framework


【解决方案1】:

_userRepository.GetByUserName(UserName) 的代码是什么样的?

在我看来,您正在从一个上下文中获取用户,并尝试从另一个上下文中删除。

例如

User myUser = null;

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

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

第二个“数据”不知道那个用户,因为它没有检索到它。

相反,您必须这样做

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

语法可能不完全正确,但本质上您需要将用户对象设置为该数据上下文中的实体,并且其状态为已删除。

如果你想修改现有对象(将状态设置为 EntityState.Modified),你必须做类似的事情

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2010-10-01
    相关资源
    最近更新 更多