gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:08:33 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com