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
リスト内の各 Mutant
に mutants
が設定されるようになります。
データロードの制御
特に大規模なデータセットやパフォーマンスの問題を扱う場合、関連エンティティの自動読み込みを避けたい場合があります。 2 つのオプションが利用可能です:
Separate DbContext: アプリケーションの他の部分からの潜在的な副作用を避けるために、クエリ専用に別の DbContext
インスタンスを使用します。
追跡クエリなし: 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 サイトの他の関連記事を参照してください。