Entity Framework Plus链式调用Where方法触发NullReferenceException求助
可能的异常原因
- 你使用的Entity Framework Plus版本存在已知bug:旧版本中针对连续链式调用多个
Where方法生成的IQueryable对象执行批量Update时,内部表达式树解析逻辑未处理多条件链式拼接的边界情况,会触发空引用异常。由于ctx、ctx2仅使用了单次Where调用,因此不会触发该问题。 - 若排除版本问题,可先执行
ctx3.ToList()验证查询本身是否正常,若查询可正常返回结果,则可100%定位为EF Plus批量更新方法的解析问题。
解决方案
- 合并链式Where条件
将两次Where调用合并为单次调用,即可绕开解析bug:
var ctx3 = await GetQueryableContext(request); ctx3 = ctx3.Where(x => x.DepotNo >= request.DepotNo && x.DepotNo <= request.DepotNo); ctx3.Update(x => new Order() { LorryLoadingListPrinted = 3333 });
升级Entity Framework Plus到最新稳定版
该类表达式树解析的边界问题在后续版本中已经修复,升级后即可直接支持多链式Where的批量更新操作。改用异步批量更新方法(可选)
如果你的业务代码运行在异步上下文,建议使用EF Plus提供的异步UpdateAsync方法,避免同步调用可能引发的上下文对象释放问题:
await ctx3.UpdateAsync(x => new Order() { LorryLoadingListPrinted = 3333 });
内容的提问来源于stack exchange,提问作者Lukasz Pomianowski
相关产品推荐
相关产品推荐

