2017-03-22 9 views
1

私はMVCアプリケーションのヘルパークラスを作成しています。このクラスには、ユーザーが初めてシステムにログインするときに情報を取得する静的メソッドが含まれます。ヘルパーメソッドを1回だけ実行する必要があります(キャッシュ結果)

私は、国のリストや言語のリストなどのリストを返す2つのメソッドを作成しました。私は毎回これを実行するのではなく、最初の呼び出しの結果を保存し、後続の呼び出しのためにそれを返します。私は必要なプロパティを持つクラスを作成すると言うでしょう

public static List<Languages> GetLanguages() 
{ 
    using (var db = new MCREntities()) 
    { 
     var languages = db.spGetLanguages(0); 
     return Mapper.Map<List<Languages>>(languages); 

    } 
} 
public static List<Countries> GetCountries() 
{ 
    using (var db = new MCREntities()) 
    { 
     var countries = db.spGetAllCountries(""); 
     return Mapper.Map<List<Countries>>(countries); 
    } 
} 

答えて

0

をliek初めてデータベースにアクセスしようとしていました。

private static List<Languages> _languages = null; 

public static List<Languages> GetLanguages() 
{ 
    if(_languages == null){ 
     using (var db = new MCREntities()) 
     { 
      var languages = db.spGetLanguages(0); 
      _languages = Mapper.Map<List<Languages>>(languages); 

     } 
    } 
    return _languages; 
} 

代わりに、静的メソッドは、ヘルパー自身で正しいですのでcache

+0

面白い。同様の方法でuserprofile情報を取得する予定です。ユーザープロファイル情報を更新したらどうなりますか?このリストを更新するにはどうすればいいですか? – Tom

+0

これは 'static'クラスなので、ユーザプロファイルではうまく動作しません。 –

+0

userprofileがデータベースで更新されたとします。私はその後laytestのuserprofileで私のリストを更新したいと思うでしょう – Tom

0

あなたがLanguagesを開催する静的リストを持つことができ、あなたのクラスの中

public static class CurrentSession{ 
List<Languages> lang{get;set;} 
List<Countries> countries{get;set;} 
} 

とのGlobal.asaxファイル内

protected void Application_Start() 
     { 
//.........predefined codes 

    CurrentSession.lang = GetLanguages(); 

    CurrentSession.Countries =GetCountries(); 
+0

を実装することができますか?私はちょうどこの追加の静的クラスを作成し、application_startのロジックを書く必要があります – Tom

+0

あなたの現在のセッションが開始時に初期化され、アプリのどこにでも呼び出すことができる利点は、必要な呼び出しを追加することです –

関連する問題