使用Entity Framework 4.1查询具有Where表达式的上下文时如何包含所有子实体?

时间:2011-06-28 13:39:27

标签: entity-framework entity-framework-4.1

我创建了一个处理查询我的实体的通用存储库。

当我这样称呼时:

public IQueryable<TEntity> GetQuery()
        {
           return _context.Set<TEntity>().AsQueryable();
        }

我收回整个实体,包括所有子实体。

当我这样称呼时:

public TEntity GetById(Guid id)
        {
            return GetQuery().Where(e => e.Id == id).FirstOrDefault();
        }

我必须指定要包含的子实体。

有没有办法在不必为每个实体写包含的情况下取回所有子实体?

1 个答案:

答案 0 :(得分:2)

默认情况下启用延迟加载。这意味着当您访问时,将加载集合,而不是在您检索父对象时加载。

foreach (var parent in repo.GetQuery()) {
    foreach (var child in parent.Children) {
        // do something
    }
}

如果您希望急切地加载实体,您可以继承您的通用存储库并覆盖您希望使用Include lambda的方法。或者,is an Include method接受要包括的关联的字符串列表,您可以在通用存储库上公开它。

更新

不太确定为什么你给出我的回答-1但作为进一步澄清。

您说明了您的GetQuery()方法:

  

我收回整个实体,包括   所有儿童实体。

子实体是懒惰加载的,无论您是在调试中访问集合还是在页面上输出它们。

单个查询工作,启用延迟加载。

AFAIK,禁用延迟加载,这并不意味着所有集合都是自动加载的,恰恰相反,你必须通过调用Include显式加载它们。