我有一个由LINQ to SQL生成的Person类,它具有Rota类的Rota关联属性。
但是,当尝试访问Person上的Rota属性(例如调用db.People.First().Rota
)时,在生成的LINQ to SQL类的属性中抛出NullReferenceException
:
get
{
return this._Rota.Entity;
}
在Person的构造函数中,_Rota
字段被设置为default(EntityRef<Rota>)
。
当我将鼠标悬停在Visual Studio中的Person实例上时,DataTip会将Rota属性显示为已存在并正确填充。我无法弄清楚为什么它没有在代码中被初衷化。
我尝试重新生成生成的代码,其他关联工作正常。
提前致谢
答案 0 :(得分:0)
最终找出导致这种情况的原因。
在Rota对象的OnLoaded方法中,我试图将一个对象添加到我尚未初始化的列表中(duh)。该列表是rota对象的成员。
显然,这应该会让一切都变得繁荣,但它会把错误抛到一个奇怪的地方,这使得它很难调试。
自定义OnLoaded代码中引发的任何错误都将在首次访问实体的行上抛出(至少在延迟加载的实体中)。我可以更轻松地调试这个吗?
编辑:据说我无法更轻松地调试这个,因为我的OnLoaded()方法是从LINQ调用到SQL的外部代码,从而破坏了调用堆栈?
答案 1 :(得分:0)
嗯,我想基于你上面的帖子,这可能不是确切的答案,但我建议你需要确保一个人的Rota被同时检索(它不会被检索到默认情况下)。您需要配置querying across relationships。
至于关于OnLoaded的comment,只有在数据加载到它之后才会被调用 - 也就是说,当它通过SELECT而不是“延迟加载”检索时。也许你想要在OnCreated部分方法中提到的这段代码呢?这是在实例化(因此加载)和反序列化时调用的。