今天我尝试修改我现有的通用 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 的任何想法?