2012-10-15 35 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实际上不会修改输入...好吧! –

相关问题