注销站点后 EF 强制刷新模型
我首先在 EF 模型中遇到问题。我有一个网络应用程序,带有安全层、实体层和 mvc3 层。因此,在每一层中,我都放置了一个上下文数据库的实例(主声明部分中的每个类都有一个实例)。问题是当您找到我的数据库的任何用户来验证登录过程时,简单搜索,不对实体进行任何更改,就像这样:
var usr = db.Usuarios.First(user => user.UserName.Equals(userName));
如果我更改密码,例如在其他层(在我的控制器用户中),并且注销并再次登录,linq 搜索(参见上面的代码)始终返回旧密码。这是为了上下文数据库不处理也不去数据库获取数据,简单地加载用户的模型。
那么,如何强制模型刷新数据库中的数据呢? 我尝试将延迟加载设置为 false 但不起作用。
db.Configuration.LazyLoadingEnabled = false;
如果我在方法中声明我的上下文实例来验证密码并处理该实例,则部分工作,但我认为这是最佳实践。
像这样:
public static bool ValidateUser(string userName, string password)
{
if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
{
var dbtmp = new ConorContainer();
var usr = dbtmp.Usuarios.First(user => user.UserName.Equals(userName));
if (usr != null)
{
var passDescrypt = Decript(usr.Password);
dbtmp.Dispose();
return passDescrypt.Equals(password);
}
return false;
}
return false;
}
I have an issue with my model in EF model first. I have a web app, with security layer and entity layer and mvc3 layer. So in each layer I put a instance of my context db (one for each class in the main declaration section). the problem is when y find any user of my db for validate the login process, simple search, not make any changes in entity, is like this:
var usr = db.Usuarios.First(user => user.UserName.Equals(userName));
If I change the password for example in other layer (in my controller user), and the logout an login again, the linq search (see code up) always return the old password. This is for the context db dont dispose and dont go to database for the data, simple load the user for the model.
So, how I can force the model to refresh the data from the database?
I try, put lazy load in false but not work.
db.Configuration.LazyLoadingEnabled = false;
partial work if I decalre a instance of my context in the metod to validate passwork and dispose this instance, but I think it is the best practice.
like that:
public static bool ValidateUser(string userName, string password)
{
if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
{
var dbtmp = new ConorContainer();
var usr = dbtmp.Usuarios.First(user => user.UserName.Equals(userName));
if (usr != null)
{
var passDescrypt = Decript(usr.Password);
dbtmp.Dispose();
return passDescrypt.Equals(password);
}
return false;
}
return false;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须在每种情况下决定上下文的生命周期。最好在 Web 应用程序中使用短暂的上下文特别是在静态方法中。
可以通过使用
using
块来改进您的方法,该块将在超出范围时调用Dispose
方法。You have to decide the lifetime of the context in each case. It is preferred to use short lived contexts in web applications specially in static methods.
Your method can be improved by employing the
using
block that will call theDispose
method when going out of scope.