我创建了一个通用存储库,用于处理实体查询。
当我称之为:
public IQueryable<TEntity> GetQuery()
{
return _context.Set<TEntity>().AsQueryable();
}
我取回整个实体,包括所有子实体。
当我称之为:
public TEntity GetById(Guid id)
{
return GetQuery().Where(e => e.Id == id).FirstOrDefault();
}
我必须指定要包含哪些子实体。
有没有一种方法可以在不必为每个实体写include的情况下取回所有子实体?
foreach (var parent in repo.GetQuery()) {
foreach (var child in parent.Children) {
// do something
}
}
如果您希望急切地加载实体,您可以将泛型存储库子类化,并覆盖您希望使用Include
lambda的方法。或者,还有一个Include方法,它接受要包含的关联的字符串列表,您可以在通用存储库中公开该列表。
更新:
不太清楚你为什么给我答案——1,但作为进一步的澄清。
关于您的GetQuery()方法,您已说明:
我取回整个实体,包括所有子实体。
无论您是在调试中访问集合,还是在页面上输出集合,都会延迟加载子实体。
单个查询应该工作,并启用延迟加载。
而AFAIK,在禁用延迟加载的情况下,这并不意味着所有集合都会自动加载,恰恰相反,您必须通过调用Include来显式加载它们。