今日、既存のジェネリック GetAll メソッドを変更して、熱心なインクルードで動作するようにしました。遅延読み込みを有効にしていますが、特定のキャッシュ最適化のために熱心な読み込みを行いたいと考えています。
public IQueryable<T> GetAll<T>(List<string> eagerIncludeList) where T : EntityObject, new()
{
var entitySet = String.Format("[{0}]", FetchEntitySetName<T>());
ObjectQuery<T> q = this.db.CreateQuery<T>(entitySet);
foreach (string x in eagerIncludeList) {
q.Include(x);
}
return q;
}
上記のコードは機能しません (少なくとも熱心にロードされていません)。
DB.GetAll<PageConfig>(new List<string>() {"Containers"})
私のPageConfigsに関連するコンテナをロードしませんが、インクルードを ハードコーディングすると機能するので、「コンテナ」という名前が正しいと確信しています
var example = db.PageConfigSet.Include("Containers").ToList();
これは example.First().Containers.IsLoaded = true; を示します。
CreateQuery を使用する一般的なコードが機能しないのに、ハード コーディングされた ObjectSet を使用するコードが機能する理由について何かアイデアはありますか?