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

标签 c# entity-framework

我正在开发一个 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/

相关文章:

c# - 常量、Web 服务、命名空间和共享程序集

c# - 如何在用户控件上公开组合框数据绑定(bind)

c# - HttpContext.Current.User.Identity.Name 在 .ashx 处理程序中不起作用

c# - 使用EF通过id删除一条记录,如果id不存在则抛出异常

c# - Entity Framework 中首先从数据库更新模型的元数据不起作用

c# - 如何使用 EF DB First 将 SQL DB 迁移到 Azure SQL DB

c# - 使用 Linq 的多个外部连接与 2 个连接到同一个表/对象。得到了 SQL,需要 Linq to Entity

c# - 在您的 Web 应用程序中显示 SSMS 标准报告

苹果或水果的 C# 类?

entity-framework - 如何在 nuget 提示符下执行 Entity Framework Core 项目并在 Visual Studio 2015 中添加迁移?