设置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。
快速排查方案
- 在报错代码行添加断点,调试时依次查看
dataGrid、OdbConnectHelper.entObj、OdbConnectHelper.entObj.работники三个对象的运行时值,哪个为null即可定位问题点。 - 如果是
entObj为空,可给静态上下文添加懒加载逻辑,避免未初始化的问题:
public static class OdbConnectHelper { private static qualificationEntities _entObj; public static qualificationEntities entObj { get { if (_entObj == null) { _entObj = new qualificationEntities(); } return _entObj; } } }
- 如果是
работники实体集为空,打开EDMX模型右键选择「从数据库更新模型」,重新同步表结构即可。
内容的提问来源于stack exchange,提问作者reseeman
相关产品推荐
相关产品推荐

