2010-01-25 100 views
0

應該在NHibernate的惰性加載集合曾經給我一個NullReferenceException?我在如下方法中遇到異常:NHibernate的 - 懶惰加載收藏

public void Test(ISession session, int id) 
{ 
    var entity = session.Load<MyEntity>(id); 
    entity.LazyLoadedCollection.Add(SomeItem); 
} 

對LazyLoadedCollection的調用正在拋出。我的映射如下所示:

<bag lazy="true" table="MyTable"> 
    <key> 
    <column name="LazyLoadedCollection" /> 
    </key> 
    <many-to-many class="LazyLoadedItem"> 
    <column name="LazyLoadedItemId" /> 
    </many-to-many> 
</bag> 

這是NHibernate中的預期行爲嗎?

回答

2

很難說沒有看到你的類,但你可能沒有意識到的一件事是你需要在你的類的構造函數中填充每個集合。

NHibernate會在某些時候用它自己替換這些集合,但是您仍然需要確定它們最初是由一個HashedSet<T>,List<T>或其他的東西填充的,這取決於您使用的接口。

-2

不,不是。這是一個在互聯網上提問的好方法。

如果你不發佈拋出異常的代碼並告訴我們異常來自哪裏,那麼給你一個方向是不可能的。

+0

就像我在帖子中說的,異常來自entity.LazyLoadedCollection.Add。我真的不明白爲什麼遵循異常的代碼很重要。我得到了一個調用Session.Load的實體實例,並試圖將一個對象添加到一個屬性上,該屬性是一個延遲加載的集合。你能告訴我哪一部分不清楚嗎? –

+1

實體類中的代碼。我確定異常不是由NHibernate引起的,而是由我在代碼示例中看不到的其他東西引起的。當你做新的Entity()。LazyLoadedCollection.Add()時沒有任何映射或引用NHibernate會發生什麼?我猜也一樣,但我不知道你是如何實現它的。 – Paco