Asp.net mvc 3 退出站点后EF强制模型刷新
首先,我对EF模型中的模型有问题。我有一个web应用程序,具有安全层、实体层和mvc3层。因此,在每一层中,我在主声明部分为每个类放置一个上下文数据库实例。问题是,当y找到my db的任何用户以验证登录过程时,简单搜索,不在实体中进行任何更改,如下所示:Asp.net mvc 3 退出站点后EF强制模型刷新,asp.net-mvc-3,model,entity-framework-4.1,lazy-loading,Asp.net Mvc 3,Model,Entity Framework 4.1,Lazy Loading,首先,我对EF模型中的模型有问题。我有一个web应用程序,具有安全层、实体层和mvc3层。因此,在每一层中,我在主声明部分为每个类放置一个上下文数据库实例。问题是,当y找到my db的任何用户以验证登录过程时,简单搜索,不在实体中进行任何更改,如下所示: var usr = db.Usuarios.First(user => user.UserName.Equals(userName)); 例如,如果我在控制器用户的其他层中更改密码,并且注销时再次登录,linq搜索see code up
var usr = db.Usuarios.First(user => user.UserName.Equals(userName));
例如,如果我在控制器用户的其他层中更改密码,并且注销时再次登录,linq搜索see code up总是返回旧密码。这是针对上下文数据库的,不要处理数据,也不要转到数据库,只需为模型加载用户
那么,如何强制模型刷新数据库中的数据呢?
我试着,把懒惰的负载放在错误的位置,但不工作
db.Configuration.LazyLoadingEnabled = false;
如果我在metod中标记了我的上下文的一个实例来验证passwork并处理这个实例,那么这是部分工作,但我认为这是最佳实践
就像这样:
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应用程序中使用短期上下文,特别是在静态方法中 您的方法可以通过使用using块来改进,该块将在超出范围时调用Dispose方法
public static bool ValidateUser(string userName, string password)
{
if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
{
using(var dbtmp = new ConorContainer())
{
var usr = dbtmp.Usuarios.First(user => user.UserName.Equals(userName));
if (usr != null)
{
var passDescrypt = Decript(usr.Password);
return passDescrypt.Equals(password);
}
}
return false;
}
return false;
}
tks Eranga,工作完美,这类似于有一个dbtmp.dispose,对吗??