ホームページ >バックエンド開発 >C++ >エンティティフレームワークのWhere句を使用して関連するエンティティを熱心にロードするにはどうすればよいですか?

エンティティフレームワークのWhere句を使用して関連するエンティティを熱心にロードするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-02-01 13:46:08922ブラウズ

How to Eagerly Load Related Entities with a Where Clause in Entity Framework?

エンティティフレームワークでのフィルタリングで関連データを効率的にロードする

エンティティフレームワーク6ソリューション

EF6は、熱心な荷重と関係の修正に依存しています。 ただし、この修正メカニズムは、多くの関係と多くの関係で常に正しく機能するとは限りません。 回避策には:

怠zyなロードの無効化:
    怠zyなロードを防ぎ、すべてのデータが単一のクエリで取得されるようにします:
  1. フィルタリングを使用した

    <code class="language-csharp">Context.Configuration.LazyLoadingEnabled = false;</code>
    プロジェクション:
  2. プロジェクションを使用して、クエリ中に関連するエンティティをフィルタリングします:
  3. <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>
    自動関係の修正:
  4. efは、各
  5. オブジェクトのプロパティを起きている乗客のみに自動的に入力します。

    Passengersデータ転送オブジェクト(dtoS):Busオートマッパーなどのマッピングツールを使用して、取得したデータをDTOに変換して最適なデータ転送を使用します。

  6. エンティティフレームワークコア(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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。