删除BusAppl关联实体时触发NullReferenceException问题咨询
解决删除BusApplDpndncy时的NullReferenceException问题
我一眼就看出问题出在你BusAppl属性的setter里——当EF在处理实体删除的关联清理时,会把这个导航属性设为null,而你的setter直接访问了value.BusApplNm,这自然会抛出空引用异常。
问题根源
当你调用_context.BusApplDpndncy.Remove(toRemove);然后执行SaveChanges()时,Entity Framework会自动处理实体间的关联关系:如果BusApplDpndncy和BusAppl是可选关联,EF可能会尝试将BusApplDpndncy的BusAppl导航属性置为null(用于清理关联状态)。这时候你的setter方法接收到null作为value,直接访问value.BusApplNm就触发了NullReferenceException。
解决方案
最简单的修复方式就是在setter里增加null检查,避免访问null对象的属性:
public BusAppl BusAppl { set { // 用空条件运算符安全访问属性,value为null时直接返回null this._BusApplName = value?.BusApplNm; this._BusAppl = value; } get { return this._BusAppl; } }
如果你使用的是不支持空条件运算符?.的旧版C#,可以改用传统的判断逻辑:
public BusAppl BusAppl { set { if (value != null) { this._BusApplName = value.BusApplNm; } else { this._BusApplName = null; // 也可根据业务需求设置默认值 } this._BusAppl = value; } get { return this._BusAppl; } }
额外优化建议
你也可以检查EF的关系配置,确认是否需要在删除BusApplDpndncy时自动清理BusAppl导航属性。如果业务逻辑中删除关联实体不需要修改BusAppl的状态,可以通过调整关系配置避免EF自动设置导航属性为null,但上面的setter修复已经是最直接解决当前异常的方案。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

