ホームページ >バックエンド開発 >C++ >EF Core: 関連エンティティにアクセスするときに Null リレーションを処理する方法

EF Core: 関連エンティティにアクセスするときに Null リレーションを処理する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-24 22:26:10602ブラウズ

EF Core: How to Handle Null Relations When Accessing Related Entities?

EF Core: 関連エンティティによる Null 参照例外の回避

関係が適切に読み込まれていない場合、Entity Framework Core (EF Core) クエリで関連エンティティに直接アクセスすると、NullReferenceException エラーが発生する可能性があります。これは、EF Core が関連データを取得する前にナビゲーション プロパティにアクセスしようとするとよく発生します。

たとえば、Mutant エンティティに OriginalCode ナビゲーション プロパティがある場合、関連する mutant.OriginalCode エンティティを明示的にロードしていない限り、null にアクセスすると OriginalCode が返される可能性があります。 EF Core は、デフォルトでは遅延読み込みを実行しません。

解決策: 積極的な読み込み

最も簡単なアプローチは熱心な読み込みです。これにより、最初のクエリ中に関連データがプリロードされ、Null 値が防止されます。 この例では:

<code class="language-csharp">var mutants = db.Mutants.Include(m => m.OriginalCode).ToList();</code>

これにより、m.OriginalCode リスト内の各 Mutantmutants が設定されるようになります。

データロードの制御

特に大規模なデータセットやパフォーマンスの問題を扱う場合、関連エンティティの自動読み込みを避けたい場合があります。 2 つのオプションが利用可能です:

  1. Separate DbContext: アプリケーションの他の部分からの潜在的な副作用を避けるために、クエリ専用に別の DbContext インスタンスを使用します。

  2. 追跡クエリなし: AsNoTracking() を使用して、EF Core によるエンティティの追跡を防止し、パフォーマンスを向上させます:

<code class="language-csharp">var mutants = db.Mutants.AsNoTracking().ToList();</code>

遅延読み込み (EF Core 2.1 以降)

EF Core 2.1 以降のバージョンは遅延読み込みをサポートしています。 有効にするには:

  • 仮想プロパティ: すべてのナビゲーション プロパティを virtual として宣言します。
  • プロキシ パッケージ: Microsoft.EntityFrameworkCore.Proxies NuGet パッケージをインストールします。
  • プロキシを有効にする: UseLazyLoadingProxies() を構成するときに DbContext を呼び出します。

EF Core は、プロキシを使用しない遅延読み込みアプローチも提供します。詳細については、公式ドキュメントを参照してください。 遅延読み込みはパフォーマンスに影響を与える可能性があるため、慎重に使用してください。

以上がEF Core: 関連エンティティにアクセスするときに Null リレーションを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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