使用Repository模式操作ticket表取值时报NullReferenceException异常
空引用异常排查方案
核心排查点
- 校验Repository查询返回的ticket实体是否为空:你当前的判空逻辑大概率仅覆盖了传入的ticket ID,没有校验
GetById(ticketId)这类查询方法的返回值。即使ID合法有效,也可能因为软删除过滤、权限拦截、ORM全局查询筛选器等逻辑,导致查询结果返回null,访问null对象的文本字段时就会抛出空引用异常。 - 检查实体字段映射配置:如果ticket实体的文本字段名与数据库表的列名不匹配,或是字段配置了错误的非空约束,ORM框架映射时会给该字段默认赋值为null,直接访问未做判空处理的字段值也会触发异常。
- 校验关联导航属性加载逻辑:如果你的ticket实体关联了工单回复子表,且代码中尝试访问
ticket.Reply.Text这类层级属性,即使ticket对象本身不为空,在未开启预加载、延迟加载触发失败的情况下,Reply导航属性为null也会抛出空引用异常。 - 检查Repository依赖的DbContext生命周期:如果DbContext在查询执行前已经被释放,会导致查询逻辑异常返回null,而不会显式抛出数据库操作相关异常,这种情况断点仅能看到传入ID正常,无法感知上下文已销毁的状态。
参考实现代码
public string GetTicketContent(int ticketId) { // 校验入参 if (ticketId <= 0) return string.Empty; // 执行查询 var ticket = _ticketRepository.GetById(ticketId); // 校验查询返回的实体是否为空 if (ticket == null) return string.Empty; // 校验文本字段本身是否为空,有导航属性则逐层校验 return ticket.Content ?? string.Empty; }
内容的提问来源于stack exchange,提问作者Mahdiyar Shokouhi
相关产品推荐
相关产品推荐

