ReSharper 2025.2 Help

代码检查:数据库函数不得在非数据库上下文中调用

如果您尝试调用一个旨在在数据库中执行的方法(通常作为 LINQ to Entities 查询的一部分)而不在该上下文中,则会报告此问题。

例如,Entity Framework 提供了几个旨在 LINQ to Entities 查询中使用的方法,例如 EF.Functions.Like()EF.Functions.DateDiffDay()。 这些方法没有任何有意义的实现,而是作为标记供 Entity Framework 将其转换为相应的 SQL 函数或语句。

当在 LINQ to Entities 查询之外调用时,不再有查询可转换为 SQL,而这些方法将作为 .NET 方法执行,这既无意义也可能是错误的。

为解决此问题,请确保此类方法仅在由 Entity Framework 转换为 SQL 的 LINQ 查询中调用。

在下面的示例中,在 LINQ to Entities 查询上下文之外使用 EF.Functions.Like() 是有问题的。 为了解决此问题,我们将 EF.Functions.Like() 调用放入 LINQ to Entities 查询中。

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));
最后修改日期: 2025年 9月 27日