调用changedirector.update(TrackedObject item)抛出NullReferenceException求助
解决Linq to SQL里
changedirector.update(TrackedObject item)抛出NullReferenceException的问题 我明白你现在的困境——用Linq to SQL新建DataContext后调用changedirector.update(TrackedObject item)时碰到了NullReferenceException,找到的相关方案是重写代码但没法采用。结合Linq to SQL的常见坑,给你几个不用动核心代码的排查和修复方向:
- 先确认传入的对象状态:检查你传给
update方法的TrackedObject实例是不是null,还有它那些Linq to SQL自动生成的属性(尤其是外键、延迟加载的导航属性)有没有在之前的操作里被意外置空。要是这个对象是从别的DataContext拿过来的,跨上下文的情况下延迟加载属性可能因为原上下文释放而失效,更新时就容易出空引用。 - 盯紧DataContext的生命周期与对象关联:确保你新建的DataContext没被提前释放,而且这个上下文已经正确关联了你要更新的对象。如果对象来自另一个DataContext,记得先调用
DataContext.Attach()把对象附加到当前上下文再执行更新,不然Linq to SQL没法追踪对象状态,很可能触发空引用。 - 检查ChangeDirector的依赖状态:
changedirector大概率依赖DataContext内部的追踪组件(比如ChangeTracker)。你可以试试在调用update前,用当前DataContext查一下这个TrackedObject的最新状态,让上下文的内部追踪机制先初始化好,再执行更新操作。 - 临时禁用延迟加载尝试:如果你的DataContext开了延迟加载,试着把它关掉(设置
DataContext.DeferredLoadingEnabled = false)再跑更新。有时候延迟加载的导航属性在更新环节会触发意料之外的空引用。
补充说明:这类空引用异常基本都和Linq to SQL的对象状态追踪、DataContext的生命周期管理有关,不一定非得重写代码,调整对象的附加方式或者上下文的配置往往就能解决问题。
内容的提问来源于stack exchange,提问作者linmic
相关产品推荐
相关产品推荐

