efクエリの最適化:
を含む関連エンティティをフィルタリングします この記事では、エンティティフレームワーク(EF)クエリ内の句を使用して、関連するエンティティを効率的に取得するという課題に対処します。 目標は、複数のデータベース旅行を回避することです
Where
と
のコレクションナビゲーションプロパティがあります。目的は、運転しているすべてのバスを回収することと、目を覚ましている乗客のみと一緒に
Bus
一般的な非効率的なアプローチは、複数のデータベース呼び出しをもたらします。 より効率的なソリューションでは、怠zyなロードを無効にし、クエリ内のフィルタリングされたPerson
句を使用して関連するエンティティを明示的にロードすることを伴います。
Bus
このアプローチを示す例は次のとおりです
Person
呼び出しは、メモリの結果を実現し、EFが関係を正しく確立できるようにします。 最後に、Where
オブジェクトのみが選択されて返されます
重要な考慮事項:
Context.Configuration.LazyLoadingEnabled = false; var buses = Context.Busses.Where(b => b.IsDriving) .Select(b => new { Bus = b, AwakePassengers = b.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.Bus) .ToList();
この方法は、EF6で効果的ですが、多くの関係とEFコアで調整が必要になる場合があります。 EF Coreは、より複雑なシナリオに代替ソリューションを提供できるグローバルクエリフィルターなどの機能を提供します。 これらの高度な手法と多くの関係と多くの関係の処理の詳細については、元のソースを参照してください。
以上が関連エンティティをEFクエリにWHERE句を持つ効率的に含めるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。