2010-06-04 85 views
2

我有一个Person类是由LINQ to SQL生成的,它有一个Rota关联属性到一个Rota类。LINQ to SQL关联抛出null异常

但是尝试访问罗塔财产的人(例如呼叫db.People.First().Rota)时,一个NullReferenceException在生成的LINQ抛向SQL类的属性:

get 
{ 
    return this._Rota.Entity; 
} 

_Rota场正​​在设置为default(EntityRef<Rota>) Person的构造函数。

当我将鼠标悬停在Visual Studio中的Person实例上时,DataTip将Rota属性显示为现有的并正确填充。我无法弄清楚为什么它在代码中没有被初始化。

我试过重新生成的代码,其他协会工作正常。

在此先感谢

回答

0

最终找出是什么原因造成的。

在Rota对象的OnLoaded方法中,我试图添加一个对象到我还没有初始化(DUH)的列表中。该列表是rota对象的成员。显然这应该会让所有事情都变得繁荣起来,但它却把错误抛在了一个让它很难调试的奇怪的地方。

自定义OnLoaded代码中抛出的任何错误都会在第一次访问实体的行上抛出(至少在懒惰实体中)。我可以更容易地调试吗?


编辑:大概我不能调试这个任何容易,因为我的装载的()方法是从LINQ调用SQL的外部代码,从而打破了调用堆栈?

0

嗯,我想根据你上面的帖子,这可能不是确切的答案,但我想建议你需要确保一个人的罗塔甚至被同时检索(它不会默认检索)。您需要配置querying across relationships

至于你的comment关于OnLoaded,它只在数据加载到它之后调用 - 也就是说,当它通过SELECT检索而不是“延迟加载”时。也许你喜欢你在OnCreated部分方法中提到的代码?这被称为实例化(并因此加载)以及反序列化。