2012-02-14 12 views
1

まず、EFモデルで自分のモデルに問題があります。私は、セキュリティ層とエンティティ層とmvc3層と、Webアプリケーションを持っています。だから各層で私は私の文脈のdbのインスタンスを置く(主要な宣言セクションの各クラスのために1つ)。問題は、ログインプロセスを検証するために、yは私のデシベルの任意のユーザーを見つけたときである、単純な検索、エンティティのいずれかの変更を加えていない、このようなものです:私は他の層に例えばパスワードを変更する場合ログアウトサイト後のEF強制モデルのリフレッシュ

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

(中私のコントローラのユーザ)、ログアウトし直すと、linq検索(コードアップ参照)は常に古いパスワードを返します。これはコンテキストdbのためのものであり、データのためにデータベースに行きません。単純にモデルのユーザをロードしてください。

したがって、データベースからデータをリフレッシュするようにモデルを強制する方法はありますか? 私は、怠惰な負荷を偽に入れようとしますが、うまく動作しません。

db.Configuration.LazyLoadingEnabled = false; 

部分の仕事私はpassworkを検証し、このインスタンスを配置するmetodに私のコンテキストのインスタンスをdecalre、私はそれが最善の方法だと思います。そのような

は:

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; 
    } 

答えて

0

あなたは、それぞれの場合におけるコンテキストの寿命を決定する必要があります。特に、静的メソッドにウェブアプリケーションの短命のコンテキストを使用することが好ましい。

範囲外になるときDisposeメソッドを呼び出すusingブロックを使用すると、メソッドを改善できます。

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; 
} 
+0

tks Erangaは完璧に動作しますが、これはdbtmp.dispose()と似ていますか? –

+0

@RaymundoChavezはい – Eranga

関連する問題