我正在處理一個ASP.NET web表單項目,該項目具有奇怪行爲的用戶存儲庫的實現。我遇到以下行爲:EntityFramework上下文返回舊數據
- 用戶使用有效的用戶名/密碼登錄。他們成功進入。
- 用戶註銷。
- 我改變了數據庫中的密碼(爲了參數的緣故)。
- 用戶使用新密碼重新登錄。但是,登錄被拒絕爲無效。
如果我在ValidateUser()方法的「用戶」變量中設置了一個斷點並檢查密碼,即使數據庫明顯保存了新密碼,它仍然具有舊密碼。在我看來,存儲庫的體系結構存在一些問題,導致它加載一箇舊的上下文,或者沿着這些線加載一箇舊的上下文,但是每次類實例化時它都會創建一個新的PortalContext()。有任何想法嗎?
public class BaseRepository
{
protected readonly PortalContext Context = new PortalContext();
}
public class UserRepository : BaseRepository, IUserRepository
{
public bool ValidateUser(string username, string password)
{
var user = Context.Users.FirstOrDefault(x => x.LoginName == username);
if (user == null) return false;
return user.Password == password;
}
}
.NET代碼隱藏
public partial class _default
{
private readonly IUserRepository _userRepository = new UserRepository();
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (_userRepository.ValidateUser(txtUsername.Text, txtPassword.Text)
{
// Log user in
}
}
}
編輯:如果我更新的ValidateUser()到下面的代碼,問題消失。這似乎證實,它與掛在舊環境中有關。
public bool ValidateUser(string username, string password)
{
using (var context = new PortalContext())
{
var user = context.Users.FirstOrDefault(x => x.LoginName == username);
if (user == null) return false;
return user.Password == password;
}
}
對我來說這似乎很奇怪。我認爲你提供的代碼是正確的。這個問題似乎在其他地方顯然... – sjkm
我會同意,除了沒有多少其他。後面的代碼調用_userRepository.ValidateUser()來查詢數據庫以查看登錄是否有效。在用戶之前加載並且密碼已更改後,ValidateUser()返回false。 – Scott
您完全確定每個請求都獲得了存儲庫的新實例嗎?你如何改變db中的用戶記錄?還通過實體框架? – sjkm