今天我尝试修改现有的通用GetAll方法以使用eager includes。 我启用了延迟加载,但是我希望对某些特定的缓存优化进行切换加载。
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加载相关的容器, 的 BUT 在对include进行硬编码时,它确实有效,所以我确定名称“Containers”是正确的
var example = db.PageConfigSet.Include("Containers").ToList();
这给出了example.First()。Containers.IsLoaded = true;
为什么使用CreateQuery的通用代码不起作用的任何想法,但使用硬编码的ObjectSet的那个?
答案 0 :(得分:2)
q.Include(x)
会返回包含该表的新ObjectQuery<T>
。
您没有对返回值做任何事情。