2013-11-27 5 views
0

я следующий метод в моем MVC контроллер:метод контроллера не обновляется (тот же результат каждый раз)

[HttpGet] 
public ActionResult UserProfile(String username) 
{ 
    var user = db.Users.Find(username); 

    return View(user); 
} 

Эта функция возвращает Просмотр с профилем пользователя. Но результат такой же, независимо от изменений в базе данных.

Когда я отлаживаю, похоже, что db не меняется вообще, в то время как в других контроллерах все работает нормально.

EDIT: Место, когда я делаю изменения

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

Im новой для этого, так что не смеяться над моим кодом: P Когда я показываю resUser.RentedBooks--; это одно и то же каждый раз.

+1

Вы уверены, что вызываете 'SaveChanges()' на свой объект 'DatabaseContext'? –

+0

Что вы ожидаете изменить в базе данных? Вы ничего здесь не меняете. Отправьте код, в котором вы внесете изменения. – ataravati

+0

yes, но mby это поможет, когда я скажу, что этот контекст является статичным в каждом контроллере. – Kmaczek

ответ

2

В соответствии с тем, что @JeroenVannevel сказал в комментариях, еще одна проблема, с которой вам может столкнуться, поскольку вы используете статический контекст (и тот, с которым мне приходилось иметь дело в прошлом), заключается в том, что один раз конкретный DbContext загрузил объект (или набор сущностей, в моем случае), он не будет обновляться только потому, что в базе данных были сделаны некоторые внешние изменения. Он загружает эти объекты в Local и просто ссылается на них автоматически, если вы запрашиваете его.

раствор, а затем, чтобы всегда ставить свои DbContext звонки, завернутые в using блоке, так как DbContext реализует IDisposable.

Одно из предостережений при использовании этого подхода, поскольку вы используете MVC: если вы используете ленивую загрузку, и знаете, что вашему представлению потребуется некоторая информация из дочернего объекта (или для перечисления имен коллекции дочерние объекты), вам абсолютно необходимо убрать эти дочерние объекты до, вы выходите из блока using, или вы обнаружите, что получаете исключения, говорящие, что ваш контекст был удален.

+1

Это помогло. Раньше я использовал 'using', но мне было неудобно, поэтому я изменил db на static. – Kmaczek

Смежные вопросы