c# - 如何删除 MVC/Entity Framework 中的对象 : The object cannot be deleted because it was not found in the ObjectStateManager

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

我在尝试删除用户和关联对象时收到一条错误消息。错误消息是无法删除该对象,因为在 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");
    }

存储库

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.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),您必须做类似的事情

关于c# - 如何删除 MVC/Entity Framework 中的对象 : The object cannot be deleted because it was not found in the ObjectStateManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5400161/

相关文章:

c# - Ping.SendAsyncCancel 挂起任务

c# - 迫切需要在 C# 中使用 YQL 逐步进行基本的 oauth 签名?

c# - 标志属性是必需的吗?

c# - 使用 HAP (HTML Agility Pack) 从页面获取数据

asp.net-mvc - 网络 API : Pass an empty parameter in a query string

javascript - 在服务器端调用 MVC 中使用 javascript 变量

c# - ASP :textbox select all text by click button and copy to client clipboard

c# - 完成的异步下载关闭两次而不是一次

.net - 如何解决 SHIM_NOVERSION_FOUND 错误消息

c# - Automapper ResolveUsing 原因 "Can' t 将此解析为可查询表达式”