默认情况下,aDbContext
将使用延迟加载。根据您的用例,您可以使用一些选项。
1-如果您可以控制您的生命周期DbContext
,请不要丢弃它。但是,每次您访问相关实体(第一次)时,都会向数据库发送一个新查询以获取它。
2-通过Include
在以下方面使用热切地包括相关实体IQueryable<Kitten>
:
// For imagine context is the DbContext for your EF Model
context.Kittens.Include(c => c.Owners); // Or Include("Owners")
但是,如果您无法控制存储库,则您别无选择,只能调用存储库的相关方法(如IEnumerable<Owner> GetOwners(Kitten kitten)
),因为存储库已经返回列表。
如果这样做,请考虑在实现之前急切地将 Kitten 的所有者包含在存储库中,ToList()
或者返回 IQuerable 并将责任留给调用类以包含相关实体或自定义查询。如果您不希望调用者能够更改查询,则可以添加带有包含的重载,可能类似于以下内容:
public List<Kitten> GetKittens(params string[] includes)
{
return includes.Aggregate(
context.Kittens.AsQueryable(),
(query, include) => return query.Include(include)).ToList();
}
总而言之,这是您必须做出的实施决策。