我创建了一个处理查询我的实体的通用存储库。
当我这样称呼时:
public IQueryable<TEntity> GetQuery()
{
return _context.Set<TEntity>().AsQueryable();
}
我收回整个实体,包括所有子实体。
当我这样称呼时:
public TEntity GetById(Guid id)
{
return GetQuery().Where(e => e.Id == id).FirstOrDefault();
}
我必须指定要包含的子实体。
有没有办法在不必为每个实体写包含的情况下取回所有子实体?
答案 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显式加载它们。