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

设置ItemsSource时触发System.NullReferenceException异常(ADO.NET EF场景)

System.NullReferenceException的本质是访问了未实例化的对象成员,针对你给出的代码行,可能的原因如下:

  • OdbConnectHelper.entObj未完成实例化:绝大多数该场景的报错都来自这个问题。如果你的帮助类仅声明了entObj静态字段,没有在首次访问前执行new qualificationEntities()初始化操作,访问entObj的работники属性就会触发空引用。你可以在报错行打断点,查看OdbConnectHelper.entObj的运行时值即可验证。
  • dataGrid控件未初始化:如果该代码行写在窗口/用户控件的构造函数中,且位置在InitializeComponent()方法调用之前,XAML定义的DataGrid控件还未被实例化,直接访问dataGrid.ItemsSource就会触发异常。
  • EF上下文的работники实体集映射异常:如果EDMX模型中的实体集名称拼写错误、对应数据库表被删除/重命名、模型和数据库结构不匹配,EF加载работники实体集时会返回null,调用ToList()时就会报错。你可以单独执行OdbConnectHelper.entObj.работники.Count()测试实体集是否能正常访问。
  • EF上下文初始化失败隐藏问题:虽然你检查了连接字符串配置,但如果.\sqlexpress01实例未启动、当前运行程序的Windows账号没有qualification数据库的访问权限、EF版本和项目目标框架不兼容,都会导致entObj内部初始化失败,表面声明了字段实际值为null。
  • 多线程操作上下文异常:如果该代码在非UI线程执行,或者多个线程同时操作entObj静态上下文,可能导致上下文被意外释放,访问时返回null。

快速排查方案

  1. 在报错代码行添加断点,调试时依次查看dataGrid、OdbConnectHelper.entObj、OdbConnectHelper.entObj.работники三个对象的运行时值,哪个为null即可定位问题点。
  2. 如果是entObj为空,可给静态上下文添加懒加载逻辑,避免未初始化的问题:
public static class OdbConnectHelper
{
    private static qualificationEntities _entObj;
    public static qualificationEntities entObj
    {
        get
        {
            if (_entObj == null)
            {
                _entObj = new qualificationEntities();
            }
            return _entObj;
        }
    }
}
  1. 如果是работники实体集为空,打开EDMX模型右键选择「从数据库更新模型」,重新同步表结构即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:15:07