context.dispose()和context.cache.releaseall()之间的区别

本文关键字:context 区别 之间 dispose cache releaseall | 更新日期: 2023-09-27 18:24:01

我有点困惑,想从技术上知道当我调用这些命令中的每一个时到底会发生什么,这也比另一个更可取。

我的场景是在桌面应用程序中,其中有一个LoginForm,其中:

  1. 用户通过提供用户名和密码登录
  2. 我直接在数据库中针对当前用户更改了密码
  3. 用户注销
  4. 用户通过提供用户名和新密码再次登录,但上下文仍保留旧密码

问题说明: 如何获取刷新数据,下面是我的代码SNIPET

public partial class LoginForm : Form
{    
    EntitiesModel _context = null;
    public LoginForm()
    {
        InitializeComponent();
    }
    private void LoginForm_Load(object sender, EventArgs e)
    {
        _context = new EntitiesModel(Global.ConnectionString);
    }
    private void btnLogin_Click(object sender, EventArgs e)
    {
        USER user = _context.USERs.FirstOrDefault(u => u.USERNAME == txtUsername.Text.Trim() && u.PASSWORD == txtPassword.Text.Trim());
        // after authentication show main menu etc
    }
    private void btnLogout_Click(object sender, EventArgs e)
    {
        //option 1: i dispose off current context here and create new context each time login button is clicked, so that context fetches latest password from database
        if (_context != null)
            _context.Dispose();
        //option 2: i only release all entities from current context cache and use the same context each time login button is clicked rather creating new context
        _context.cache.ReleaseAll();
    }
}

context.dispose()和context.cache.releaseall()之间的区别

不知道表单的生命周期,但应该执行以下操作:

public partial class LoginForm : Form
{    
    public LoginForm()
    {
        InitializeComponent();
    }
    private void LoginForm_Load(object sender, EventArgs e)
    {
    }
    private void btnLogin_Click(object sender, EventArgs e)
    {
        using (EntitiesModel context = new EntitiesModel(Global.ConnectionString))
            USER user = _context.USERs.FirstOrDefault(
                u => u.USERNAME == txtUsername.Text.Trim() && 
                     u.PASSWORD == txtPassword.Text.Trim());
            // after authentication show main menu etc
        }
    }
    private void btnLogout_Click(object sender, EventArgs e)
    {
    }
}

使用短范围上下文<=>在需要时创建它,然后释放它以避免:

  • 数据库锁
  • 记忆中的上下文增长

您应该在应用程序内存中存储一个currentUser,并将currentUser设置为null以注销。为此,您必须在需要时将当前用户附加到上下文中。