簡體   English   中英

控制器方法不更新(每次都是相同的結果)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM