You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 6部署至Azure后自动添加WHERE 1=0子句致查询无结果

EF Core自动生成WHERE 1=0条件导致查询无结果(本地正常,Azure异常)

问题现象

将代码从本地服务器迁移至Azure后,多数查询返回0条结果,但CountAsync能正确返回总记录数。通过SQL Profiler发现EF Core自动为部分查询添加WHERE 1 = 0条件,代码中未手动设置该过滤。

示例代码中,CountAsync返回总记录数为2,但ToListAsync返回空数组(数据库实际存在2条记录):

public async Task<PagedResultDTO<ApplicationOrganizationDTO>> GetAll(PaginationInputDTO<Guid> input)
{
    try
    {
        var query = _context.ApplicationOrganizations.AsQueryable();

        if (!string.IsNullOrEmpty(input.SortBy))
        {
            query = input.SortType.Equals("DESC")? query.OrderByDescending(x => x.EnglishName):query.OrderBy(x=>x.EnglishName);
        }

        int recordsToSkip = (input.PageNumber - 1) * input.PageSize;
        int recordsToTake = input.PageSize;

        var records = await query.Skip(recordsToSkip).Take(recordsToTake).ToListAsync();

        var result = new PagedResultDTO<ApplicationOrganizationDTO>
        {
            Results = _mapper.Map<List<ApplicationOrganizationDTO>>(records),
            TotalRecords = await query.CountAsync()
        };

        return result;
    }
    catch (Exception ex)
    {
        throw;
    }
}

SQL Profiler捕获的生成查询:

SELECT [a].[Id], [a].[ActivationDurationInDays], [a].[ActivationStatus], [a].[ArabicName], [a].[CreationDate], [a].[EnglishName], [a].[LastEditDate], [a].[PhoneNumber], [a].[ShortName], [a].[Website]
FROM [ApplicationOrganizations] AS [a]
WHERE 0 = 1

已核对后端模型与数据库Schema完全一致,本地环境运行正常,需无需修改代码的解决方案。

无需修改代码的排查与解决步骤

  • 清除EF Core查询缓存:重启Azure应用服务,强制EF Core重新生成查询计划,避免旧缓存导致的错误查询逻辑。
  • 检查Azure SQL兼容性级别:对比本地数据库与Azure SQL的兼容性级别(本地可通过SELECT compatibility_level FROM sys.databases WHERE name = 'YourDB'查询),将Azure SQL的兼容性级别调整为与本地一致(例如本地为150对应SQL Server 2019,Azure中通过Azure Portal或ALTER DATABASE YourDB SET COMPATIBILITY_LEVEL = 150修改)。
  • 验证数据库连接目标:确认Azure环境的连接字符串指向的数据库与本地为同一份备份,且表的架构(如dbo)一致,避免因连接到错误数据库/架构导致EF无法匹配数据而生成WHERE 1=0。
  • 重置Azure SQL查询计划:使用具有权限的账号执行DBCC FREEPROCCACHE清除服务器级查询缓存,或针对特定表执行UPDATE STATISTICS ApplicationOrganizations更新统计信息,强制重新生成正确的查询计划。
  • 检查应用配置差异:对比本地与Azure环境的appsettings.json或Azure应用配置,确认是否存在EF Core相关的全局查询过滤器配置(如HasQueryFilter)被意外启用。

内容的提问来源于stack exchange,提问作者Abdulaziz Burghal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:58:16