ReSharper 2024.1 ヘルプ

コード検査: ナビゲーションプロパティを使用すると、不完全なデータが返される可能性があります

このインスペクションは、一連のエンティティに対してクエリが実行され (たとえば、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() を使用して People DbSet を非同期に反復していますが、各 Person エンティティの Accounts ナビゲーションプロパティの積極的な読み込みは含まれていません。

反復は非同期で実行されるため、ネストされた foreach ループが実行される前にコンテキストが破棄または変更される可能性があり、一部の Person エンティティでは Accounts コレクションが不完全になるか空になる場合があります。

この問題を解決するには、Include() メソッドを使用して、各 Person エンティティの Accounts ナビゲーションプロパティを積極的に読み込みます。

関連ページ:

コードインスペクション設定を構成する

設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...

コード検査: 一方向の操作は値を返さない

このインスペクションは、コンテキストにおける契約の違反を報告します。IsOneWay=true 契約は、Windows 通信 Foundation (WCF) で使用され、操作をファイアアンドフォーゲット方式で呼び出す必要があることを示します。これは、クライアントが操作の呼び出し後にサーバーからの応答を待たないことを意味します。非 void メソッドにこの方法でアノテーションが付けられている場合、エラーを示す可能性のある不整合が発生します。これを修正するには 2 つの方法があります。インテンション...