代码检查:数据库函数不得在非数据库上下文中调用
如果您尝试调用一个旨在在数据库中执行的方法(通常作为 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月 26日