注销站点后刷新EF强制模型

时间:2012-02-14 15:25:13

标签: asp.net-mvc-3 model entity-framework-4.1 lazy-loading

我首先在EF模型中遇到了我的模型问题。我有一个Web应用程序,带有安全层和实体层以及mvc3层。所以在每一层我都放了一个我的上下文db的实例(一个用于主声明部分中的每个类)。问题是当y找到我的数据库的任何用户来验证登录过程,简单搜索,而不是在实体中进行任何更改,就像这样:

var usr = db.Usuarios.First(user => user.UserName.Equals(userName));

如果我在其他层(在我的控制器用户中)更改密码,并且再次注销登录,则linq搜索(请参阅代码)始终返回旧密码。这是针对上下文db不配置而不去数据库的数据,简单地为模型加载用户。

那么,我如何强制模型刷新数据库中的数据呢? 我尝试,把懒惰的负载放在虚假但不起作用。

db.Configuration.LazyLoadingEnabled = false;
如果我在metod中对我的上下文的实例进行decalre以验证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;
    }

1 个答案:

答案 0 :(得分:0)

您必须在每种情况下决定上下文的生命周期。最好在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;
}