2011-11-11 35 views
1

我正在使用名爲User的實體對象。這是我用來保存(在庫)功能:修改實體對象被保存到數據庫,但使用.net檢索並不反映更改

public void saveUser(User user){ 
if (user.EntityState == System.Data.EntityState.Detached) 
    this._db.Users.Attach(user); // attach to the context 

this._db.ObjectStateManager.ChangeObjectState(user, System.Data.EntityState.Modified); 
this._db.SaveChanges(); 
} 

這種實體與實體數據模型設計器創建的。這是由視圖(我使用實體對象作爲模型)更改,並保存調用是由我的控制器。

當我編輯用戶時,所做的更改會保存到數據庫,但視圖會看到舊屬性。當我重新啓動程序時,顯示正確的屬性值。

這是我如何從資源庫中檢索對象:

public IQueryable<User> GetUsers(String user_name) 
    { 
     IQueryable<User> userquery = from u in _db.Users 
            where u.user_name == user_name 
              select u ; 

     return userquery; 

    } 

控制器:

public ActionResult ManageUser(String user_name) 
    { 
      IQueryable<User> users = this.users_db.getUsers(user_name); 
      User user = users.First(); 
      return View(user); 

    } 
[HttpPost] 
public ActionResult ManageUser(User user){ 
    this.users_db.saveUser(model.user); 
    ViewBag.message="Success"; 
    return View(user); 
} 

我離開了一些爲簡潔異常和錯誤檢查代碼。

+0

你的控制器是什麼樣的? –

+0

剛剛添加了控制器功能。謝謝。 – James

回答

1

_db可能是一個實例ObjectContext的?你什麼時候實例化它?

如果您在請求之間保留相同的實例,則可以解釋您描述的行爲。在這種情況下,它將返回在更新數據庫中的值之前已經檢索的User對象。刷新他們應該幫助:

_db.Refresh(RefreshMode.StoreWins, user); 

雖然更好的做法是爲每個請求創建一個新的ObjectContext的實例。

+0

謝謝你!我選擇爲每個請求創建一個新的上下文,並且運行良好。 – James

1
[HttpPost] 
public ActionResult ManageUser(User user){ 
    this.users_db.saveUser(model.user); 
    ViewBag.message="Success"; 
    return RedirectToAction("ManageUser"); 
} 

,也可以查詢更新的模型重新

[HttpPost] 
public ActionResult ManageUser(User user){ 
    this.users_db.saveUser(model.user); 
    ViewBag.message="Success"; 
    IQueryable<User> users = this.users_db.getUsers(user_name); 
    user = users.First(); 
    return View(user);   
} 

是你逝去的老模型視圖的原因見GetUsers

[HttpPost] 
public ActionResult ManageUser(User user){ <-- you get the posted model here 
    this.users_db.saveUser(model.user);<-- here it is saved 
    ViewBag.message="Success"; <--success msg 
    return View(user);<-- and here you are passing the recieved model as it is to the view 
} 
+0

謝謝,即使進行此更改後我仍然遇到問題,因爲當我離開頁面並返回時,我會看到舊值。 – James

相關問題