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;
}
}
これらのデータの一部をキャッシュすることも考えられます(頻繁に変更されない場合)。 – Shyju
コメントが分かりません。説明できますか? –
https://en.wikipedia.org/wiki/Cache_(computing) – Shyju