ReSharper 2025.3 ヘルプ

コード検査: データベース関数はデータベース以外のコンテキストで呼び出されてはなりません

この問題は、データベース内で (通常は LINQ to Entities クエリの一部として) 実行されるメソッドをそのコンテキスト外で呼び出そうとした場合に報告されます。

たとえば、Entity フレームワークは、EF.Functions.Like()EF.Functions.DateDiffDay() など、LINQ to Entities クエリ内での使用を目的としたメソッドをいくつか提供します。これらのメソッドには意味のある実装はなく、エンティティフレームワークが対応する SQL 関数またはステートメントに変換するためのマーカーとして機能します。

LINQ to Entities クエリの外部で呼び出された場合、SQL に変換するクエリはなくなり、代わりにこれらのメソッドは .NET メソッドとして実行されますが、これは無意味であり、エラーになる可能性があります。

この問題を解決するには、そのようなメソッドがエンティティフレームワークによって SQL に変換される LINQ クエリ内でのみ呼び出されるようにしてください。

以下の例では、LINQ to Entities クエリコンテキストの外で EF.Functions.Like() を使用することに問題があります。これを修正するには、LINQ to Entities クエリ内に EF.Functions.Like() 呼び出しを挿入します。

var context = new MyDbContext(); string pattern = "John%"; bool isJohn = EF.Functions.Like("John Doe", pattern);
var context = new MyDbContext(); string pattern = "John%"; bool isJohn = context.Customers.Any(c => EF.Functions.Like(c.Name, pattern));
2024 年 4 月 08 日

関連ページ:

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

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

EF 固有コードインスペクション

ReSharper は、エンティティフレームワークプロジェクトに固有のコードの問題に対して、次のコードインスペクションを提供します。データベース関数はデータベース以外のコンテキストで呼び出されてはなりません警告関数は SQL に変換できないため、データベースコンテキストで呼び出すことはできません警告データベースに対する複数のクエリの可能性 (N+1 問題) 警告関連エンティティに対するデータベースへの複数のクエリの可能性 (N+1 問題) 提案文字列の長さが無制限であることによって発生する可能性のあ...

コード検査: このプロパティによって定義された関係は、依存関係ループにコントリビュートする

このインスペクションは、エンティティフレームワークのコンテキストで使用されるクラス間の依存関係を報告します。以下の例では、との間の双方向の関係がサイクルを形成します。つまり、には (型) があり、各には (型) があります。public class Person { public int Id { get; set; } public IList<Animal> Pets { get; } } public class Animal { public int Id { get; set;...