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