コードインスペクション: ナビゲーションプロパティの使用により不完全なデータが返される可能性があります
このインスペクションは、一連のエンティティに対してクエリが実行され (たとえば、 DbSet<T>.AsAsyncEnumerable() メソッドを使用して)、関連するエンティティが積極的にロードされたりクエリに明示的に含まれたりすることなくクエリ内でアクセスされる状況を報告します。
これが発生すると、関連するエンティティがメモリに読み込まれず、それらのエンティティのデータが不完全または欠落する可能性があります。 これにより、将来的に予期しない動作やエラーが発生する可能性があります。
この問題を回避するには、 Include() メソッドを使用して関連エンティティを積極的にロードするか、遅延ロードを有効にして、関連エンティティがアクセスされたときにオンデマンドでロードされるようにします。
await foreach (var person in ctx.People.AsAsyncEnumerable())
{
// do something
foreach (var account in person.Accounts)
{
result.Append(account.Login);
}
}
await foreach (var person in ctx.People.Include(person
=> person.Accounts).AsAsyncEnumerable())
{
// do something
foreach (var account in person.Accounts)
{
result.Append(account.Login);
}
}
上記の例では、コードは AsAsyncEnumerable() を使用して PeopleDbSet を非同期に反復していますが、各 Person エンティティの Accounts ナビゲーションプロパティの積極的な読み込みは含まれていません。
反復は非同期で実行されるため、ネストされた foreach ループが実行される前にコンテキストが破棄または変更される可能性があり、一部の Person エンティティでは Accounts コレクションが不完全になるか空になる場合があります。
この問題を解決するには、 Include() メソッドを使用して、各 Person エンティティの Accounts ナビゲーションプロパティを積極的に読み込みます。
2026 年 6 月 12 日