ReSharper 2024.1 ヘルプ

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

この問題は、データベース内で (通常は 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));