2016-08-25 23 views
0

ASP.NET MVC 5 Webプロジェクトのリファクタリングの過程で、複数のコントローラがアクセスできる別のクラスに選択リストを移動する機会があります。これにより、重複したコードを削除することができます。データベースクエリに基づく静的選択リスト

この場合、選択リストにはデータベースへのトリップが必要です。時間の経過とともに変化する可能性のあるリストを手作業でコード化することは実現可能ではない(したがって、データベースクエリ)。

私はコンパイラのエラーがなく、のように表示されますが、このアプローチをとって他の問題を作成しているかどうかはわかりません。この結果を達成するためのコード・アプローチは「悪い」方法の下に表示されていますか?これを行うより良い方法はありますか?要約すると

、これは私がやっているものです:

  • をクラスとプライベート静的読み取り専用データベースコンテキストを示す2つの関数は、トップ
  • で定義されて
  • 静的であり、内のメソッドデータベースに照会し、所望の結果を生成する。
  • これは静的クラスであるため、disposeメソッドはありません。

クラス:私の意見では

public static class ElpLookupLists 
{ 
    private static readonly EllAssessmentContext Db = new EllAssessmentContext(); 

    // code... 

    internal static IEnumerable<SelectListItem> StandardSelectList(string selectedDomain) 
    { 
     return Db.ElpStandardLists.Where(m => m.Domain == selectedDomain) 
      .Select(m => m.Standard).Distinct() 
      .Select(z => new SelectListItem { Text = z.ToString(), Value = z.ToString() }).OrderBy(z => z.Value) 
      .ToList(); 
    } 

    internal static IEnumerable<SelectListItem> PerformanceIndicatorSelectList(string selectedDomain, int? selectedStandard, 
     string selectedSubConcept) 
    { 
     var query = 
     Db.ElpStandardLists.Where(m => m.Domain == selectedDomain).Where(m => m.Standard == selectedStandard); 
     if (!string.IsNullOrEmpty(selectedSubConcept)) query = query.Where(m => m.SubConcept == selectedSubConcept); 
     var list = 
      query.Select(m => m.PerformanceIndicator) 
       .Distinct().OrderBy(m => m) 
       .Select(z => new SelectListItem { Text = z.ToString(), Value = z.ToString() }) 
       .OrderBy(z => z.Text).ToList(); 
     return list; 
    } 
} 
+0

これらのデータの一部をキャッシュすることも考えられます(頻繁に変更されない場合)。 – Shyju

+0

コメントが分かりません。説明できますか? –

+0

https://en.wikipedia.org/wiki/Cache_(computing) – Shyju

答えて

2

より良い代替手段は、このデータを取得するためのメソッドを持つ別のコントローラを作成することです、そしてあなたがこの方法をOutputCacheことができます。このメソッドを他のコントローラで呼び出すことができ、毎回データベースをトリップさせることはありません。戻り値はキャッシュされます。もちろん、キャッシュ設定を制御することができます。

この方法の利点は、使用するかどうかにかかわらず、メソッドが静的であるため、アプリケーションが開始されたときにデータベースのトリップが常に発生することです。一方、キャッシュされたメソッドを使用すると、メソッドを初めて呼び出すときにデータベースがトリップします。

関連する問題