ObjectQuery上的Generic Include实际上并不包含任何内容

时间:2012-10-15 16:16:22

标签: c# generics entity-framework-4 eager-loading

今天我尝试修改现有的通用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的那个?

1 个答案:

答案 0 :(得分:2)

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

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