gpt4 book ai didi

c# - EntityFramework 上下文返回旧数据

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:07 25 4
gpt4 key购买 nike

我正在开发一个 ASP.NET Web 窗体项目,该项目实现了一个行为异常的用户存储库。我遇到以下行为:

  1. 用户使用有效的用户名/密码登录。他们成功进入。
  2. 用户注销。
  3. 我更改了数据库中的密码(为了争论)。
  4. 用户使用新密码再次登录。但是,登录因无效而被拒绝。

如果我在 ValidateUser() 方法中的“user”变量处设置断点并检查密码,即使数据库清楚地保存了新密码,它仍然是旧密码。在我看来,存储库的体系结构存在一些问题,导致它加载旧上下文或类似的内容,但每次实例化类时都会创建一个新的 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;
}
}

最佳答案

我想我也遇到了同样的问题。问题是 MembershipProvider 仅实例化一次,您可能在其构造函数中创建了上下文,这就是当您将上下文初始化移动到方法 ValidateUser 时它起作用的原因。

关于c# - EntityFramework 上下文返回旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20128756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com