[英]Controller method not updating(same result every time)
我的mvc控制器中有以下方法:
[HttpGet]
public ActionResult UserProfile(String username)
{
var user = db.Users.Find(username);
return View(user);
}
此函數返回帶有用戶配置文件的View。 但無論數據庫的變化如何,結果都是一樣的。
當我調試時,似乎db
根本沒有改變,而在其他控制器中一切正常。
編輯:當我做出改變時放置
public ActionResult ExecuteRetreive(String username, String ISBN)
{
if (IsValid(username))
{
var resBook = db.Books.Find(ISBN);
var resUser = db.Users.Find(username);
var resRentedBooks = (from rb in db.RentedBooks
join b in db.Books on rb.ISBN equals b.ISBN
where b.ISBN == ISBN
where rb.Login == username
where rb.Returned == null
select rb).FirstOrDefault();
if (resRentedBooks == null)
{
return RedirectToAction("Fail", "FailSuccess",
new { error = "" });
}
resRentedBooks.Returned = DateTime.Now;
resBook.IsRented = false;
resUser.RentedBooks--;
db.SaveChanges();
return RedirectToAction("Success", "FailSuccess");
}
else
{
return RedirectToAction("Fail", "FailSuccess",
new { error = "Niepoprawna nazwa użytkownika" });
}
}
我是新手,所以不要嘲笑我的代碼:P當我顯示resUser.RentedBooks--;
每次都是一樣的。
作為@JeroenVannevel在評論中所說的內容的后續內容,您可能遇到的另一個問題是因為您正在使用靜態上下文(以及我過去必須處理的上下文),一旦特定的DbContext
具有加載一個實體(或一組實體,在我的情況下),它不會因為在數據庫中進行一些外部更改而傾向於刷新。 它將這些實體加載到Local
,如果您查詢它,則會自動引用它們。
因此,解決方案是始終將DbContext
調用包裝在using
塊中,因為DbContext
實現了IDisposable
。
這種方法需要注意一點,因為你正在使用MVC:如果你正在使用延遲加載,並且你知道你的View需要來自子對象的一些信息(或列出子對象集合的名稱), 在你離開using
區塊之前,你絕對需要給這些子實體加水,否則你會發現自己得到的異常說明你的背景已被處理掉了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.