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

ASP.NET MVC运行时抛NullReferenceException 加断点后异常不触发问题

问题描述

ASP.NET MVC程序仅在正常运行时抛出NullReferenceException,添加断点后异常不会触发,即便按下F10快速单步跳过也不会抛出。
触发异常的代码如下(错误位置见注释):

public static double GetTotalExpenses(Sandooq sandooq, string userID = "")
{
    double totalExpenses = 0;

    if (sandooq.expenses == null || sandooq.expenses.Count == 0 ||
       (!string.IsNullOrEmpty(userID) && 
        sandooq.expenses.Where(i => i.member.Id.Equals(userID)).Count() == 0))
    {
        return totalExpenses;
    }

    if (!string.IsNullOrEmpty(userID))
    {
        foreach (Expense e in sandooq.expenses.Where(e => e.member.Id.Equals(userID) && 
                 !e.category.mainCategoryType.Equals("DPE")))
        {
            totalExpenses += e.amount;
        }
    }
    else
    {
        // 错误发生在此处,e.category为null
        foreach (Expense e in sandooq.expenses.Where(e=>
                 !e.category.mainCategoryType.Equals("DPE")))
        {
            totalExpenses += e.amount;
        }
    }

    return totalExpenses;
}

仅当未设置断点时,expense的category属性才会为null。

原因分析

该问题由Entity Framework懒加载的触发时机差异导致:

  • 无断点直接运行时,执行到访问e.category的代码行时,对应的DbContext已经被释放,懒加载无法拉取关联的category数据,直接返回null,触发空引用异常
  • 加断点调试时,断点停留的间隙调试器会隐式触发属性加载,或者此时DbContext还未被释放,懒加载可以正常拿到category数据,因此不会触发异常

解决方案

从数据库加载expenses列表时,显式预加载关联实体category,不依赖运行时懒加载,对应修改的加载代码如下:

sandooq.expenses = dbContext.dbExpenses.Include("category").Where(e => e.sandooq.id == sandooq.id).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:27:03