エンティティフレームワークでのフィルタリングで関連データを効率的にロードする
エンティティフレームワーク6ソリューションEF6は、熱心な荷重と関係の修正に依存しています。 ただし、この修正メカニズムは、多くの関係と多くの関係で常に正しく機能するとは限りません。 回避策には:
怠zyなロードの無効化:フィルタリングを使用した
<code class="language-csharp">Context.Configuration.LazyLoadingEnabled = false;</code>プロジェクション:
<code class="language-csharp">var buses = Context.Busses .Where(b => b.IsDriving) .Select(x => new { b, Passengers = x.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.b) .ToList();</code>自動関係の修正:
Passengers
データ転送オブジェクト(dtoS):Bus
オートマッパーなどのマッピングツールを使用して、取得したデータをDTOに変換して最適なデータ転送を使用します。
エンティティフレームワークコア(5.0以降)ソリューション
EF Core 5.0以降のバージョンはネストされた場所を直接サポートしています。条項の単純化:代替アプローチ:サードパーティライブラリ
のようなライブラリは、含まれるコレクションに適用可能なグローバルフィルターを管理するためのより合理化された方法を提供します。 これにより、複雑なシナリオのコードの読みやすさと保守性を高めることができます。
<code class="language-csharp">var buses = Context.Busses .Include(bus => bus.Passengers.Where(p => p.Awake)) .ToList();</code>概要
使用されているバージョンのフィルタリングで関連するデータを熱心にロードするための最良のアプローチ。 EF Core 5.0は、簡単なソリューションを提供します。 EF6の場合、怠zyな負荷を無効にし、投影の使用を含む回避策が必要です。 サードパーティのライブラリは、コード組織と柔軟性を改善するための代替手段を提供します。
以上がエンティティフレームワークのWhere句を使用して関連するエンティティを熱心にロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。