2012-10-15 57 views
0

今天我試圖修改現有的泛型GetAll方法以使用eager includes。 我已啓用延遲加載,但我想爲某些特定的緩存優化進行急切加載。ObjectQuery上的泛型包含實際上並不包含任何內容

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的泛型代碼的任何想法?

回答

2

q.Include(x)返回包含該表的新的ObjectQuery<T>

你沒有對返回值做任何事情。

+0

射擊我!我一直在看這個1小時!所以Include實際上不會修改輸入...好吧! –

相關問題