0

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

4

1 回答 1

2

q.Include(x)返回一个ObjectQuery<T>包含该表的新表。

您没有对返回值做任何事情。

于 2012-10-15T16:18:19.337 回答