Include
clauses Where
を使用してef
チャレンジ:EFのメソッドを使用して関連するエンティティを効率的に取得すると同時に、A Include
句を使用してそれらの関連するエンティティをフィルタリングするのは難しい場合があります。 ナイーブなアプローチは、多くの場合、複数のデータベース旅行と潜在的なマッピングエラーにつながります。
Where
1。 EF6の回避策(投影と修正):
エンティティフレームワーク6および以前のバージョンの場合、回避策には、怠zyなロードを無効にし、プロジェクションを使用して必要なデータのみを選択することが含まれます。 関係の修正は、協会を処理します。
このアプローチは、
ここで<code class="language-csharp">Context.Configuration.LazyLoadingEnabled = false; var buses = Context.Busses.Where(b => b.IsDriving) .Select(b => new { b, Passengers = b.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.b) .ToList();</code>
ここでのみが真のものです。 重要なことに、関係の修正は、Buses
とそのフィルター処理されたIsDriving
。
Passengers
Awake
2。レバレッジサードパーティライブラリ:Bus
Passengers
3。 EFコアの考慮事項:
EF Coreはグローバルクエリフィルターを提供しますが、現在の機能は限られています。 彼らは主にルートエンティティで動作し、EntityFramework.DynamicFilters
ステートメント内でナビゲーションプロパティのフィルタリングを直接サポートしません。 将来のバージョンは、この機能を強化する可能性があります
EntityFramework.Filters
Include
重要な考慮事項:
怠zyなロード:
予期しないデータベース呼び出しを避けるために投影と関係の修正を使用する場合は、常に怠zyな読み込み(Include
)を無効にします。
多目的:多くの関係と多くの関係が必要になる場合があります。
サードパーティの利点:LazyLoadingEnabled = false
以上が関連するエンティティの「Where」句を使用して、ef `を含める方法を効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。