EF Core接口本地查询返回正常 Azure托管后返回0记录问题咨询
可能的异常场景及排查方向
- EF Core 全局查询过滤器不匹配
检查是否为MyTable配置了全局查询过滤器(比如软删除、租户隔离、权限过滤),排查本地和Azure环境下过滤器依赖的上下文参数(比如当前登录用户ID、租户ID)取值是否一致。同表其他查询返回正常大概率是因为主动调用了.IgnoreQueryFilters()跳过了过滤规则。 - Azure SQL 行级安全(RLS)策略限制
即使连接字符串完全一致,如果使用Azure AD托管身份登录数据库,本地运行时使用的个人身份和App Service使用的系统/用户分配托管身份是不同账号,检查是否为MyTable配置了行级安全策略,限制了不同账号可查询的数据范围。 - 查询参数/表达式实际取值异常
你给出的查询示例为ctx.MyTable.Where(i => id > 0),首先确认id是否是i的属性(正确写法应为i => i.Id > 0),如果id是外部传入的参数,务必在Azure环境下打印该参数的实际取值,排查是否因为环境配置、参数绑定逻辑差异导致参数值不符合预期,比如拿到了远大于表中最大ID的数值。 - 查询转换/执行异常被静默吞掉
检查是否为DbContext配置了全局异常捕获、忽略逻辑,或者使用了数据访问中间件在查询报错时默认返回空集合。可开启EF Core的SQL日志打印,对比本地和Azure环境下该查询实际生成的SQL语句,直接在Azure SQL中执行生成的SQL确认是否有返回值。 - 模型映射的环境差异
检查是否根据ASPNETCORE_ENVIRONMENT等环境变量做了差异化的模型映射配置,比如该查询用到的DbSet在生产环境下映射到了空表,或者字段类型映射存在差异导致查询条件不生效。 - 事务隔离级别/未提交数据问题
检查该查询是否运行在特定事务中,本地和Azure环境的默认事务隔离级别存在差异时,可能出现本地可读到未提交数据、Azure环境下读不到的情况。
内容的提问来源于stack exchange,提问作者WirelessG
相关产品推荐
相关产品推荐

