デフォルトでは、 aDbContext
は遅延読み込みを使用します。ユースケースに応じて、いくつかのオプションを利用できます。
1- の寿命を管理できる場合は、DbContext
処分しないでください。ただし、関連するエンティティに (初めて) アクセスするたびに、新しいクエリがデータベースに送信されて取得されます。
Include
2- で使用することにより、関連するエンティティを熱心に含めます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)
、リポジトリが既にリストを返しているため、リポジトリの関連メソッド ( など) を呼び出すしかありません。
その場合は、実体化する前に子猫の所有者を積極的にリポジトリに含めるかToList()
、IQuerable を返し、関連するエンティティを含めるか、クエリをカスタマイズする責任を呼び出し元のクラスに任せることを検討してください。呼び出し元がクエリを変更できないようにする場合は、次のようなインクルードを含むオーバーロードを追加できます。
public List<Kitten> GetKittens(params string[] includes)
{
return includes.Aggregate(
context.Kittens.AsQueryable(),
(query, include) => return query.Include(include)).ToList();
}
全体として、これは実行する必要がある実装上の決定です。