2011-03-23 107 views
3

嘗試刪除用戶和關聯對象時出現錯誤消息。錯誤消息是該對象無法刪除,因爲它在ObjectStateManager中找不到。如何刪除MVC/Entity Framework中的對象:由於在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"); 
    } 

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

我這麼想嗎?

+0

您從'_userRepository'獲取用戶,但使用'_repository'刪除。這是一個錯字嗎? – 2011-03-23 03:12:02

回答

5

你的_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)

+0

謝謝,就是這樣... – Prabhu 2011-03-23 06:04:20