Asp.net mvc 3 退出站点后EF强制模型刷新

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

首先,我对EF模型中的模型有问题。我有一个web应用程序,具有安全层、实体层和mvc3层。因此,在每一层中,我在主声明部分为每个类放置一个上下文数据库实例。问题是,当y找到my db的任何用户以验证登录过程时,简单搜索,不在实体中进行任何更改,如下所示:

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,对吗??