我正在使用NH將數據庫映射到名爲location
的對象,該對象具有一些屬性,並且列表<Attachments>
附件(與lcocation
的實例具有一對多關係)。無法在n層web應用程序中執行延遲加載
我用lambda表達式來初始化location
istance:
public IList<T> GetAllByExpression(Expression<Func<T,bool>> expression)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return session.Query<T>().Where(expression).ToList();
}
}
在我嘗試訪問location.attachments
集合,但得到一個異常代碼中的一些後來點:
{"Initializing[Location#543c7367-08fa-4469-a252-8e2c6163be22]-failed
懶洋洋地初始化一個角色集合:Location.Attachments,沒有 會話或會話已關閉「}
我明白這個會議已經結束,但我沒有什麼可以做的。
我明白會議已經結束,但我無能爲力。
我有一個困境: 1)代碼使用從數據庫中提取後的集合,並需要會話仍然是開放的。 將會話全部開放是一種不好的做法。 (沒有using
)。
2)即使我在整個應用程序運行時期間打開會話,我也構建了一個n層Web應用程序。 DAL應該是通用的,並且不公開某些實現的會話(本例中爲NH)。
3)急切的加載似乎是解決方案,但它是浪費 - 因爲我必須急切地加載所有數據,以防其中包含其他對象列表的對象。 (甚至可以繼續循環)
我該怎麼辦?
TIA
但我不能讓會議永遠開放? –
@Elad Benda:你不應該。對於單個工作單元,會話應該是短暫的。 – jason
所以我從ORM初始化了一個Location對象,後來我不得不解決它中的「附件」集合(一對多關係)。我怎樣才能做到這一點? –