context.dispose()和context.cache.releaseall()之间的区别
本文关键字:context 区别 之间 dispose cache releaseall | 更新日期: 2023-09-27 18:24:01
我有点困惑,想从技术上知道当我调用这些命令中的每一个时到底会发生什么,这也比另一个更可取。
我的场景是在桌面应用程序中,其中有一个LoginForm,其中:
- 用户通过提供用户名和密码登录
- 我直接在数据库中针对当前用户更改了密码
- 用户注销
- 用户通过提供用户名和新密码再次登录,但上下文仍保留旧密码
问题说明: 如何获取刷新数据,下面是我的代码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();
}
}
不知道表单的生命周期,但应该执行以下操作:
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以注销。为此,您必须在需要时将当前用户附加到上下文中。