我有一個奇怪的行爲,我無法找到任何天..解決方案的 行爲我的經驗是經典LazyInitializationException
與no session or session was closed
這是通常沒有時情境會話,並試圖訪問延遲加載的屬性/集合,但是這不是我的情況,因爲我有:NHibernate的延遲加載懶=額外的沒有會話或會話關閉
- 會話的每個請求會話使用Spring.NET
OpenSessionInViewModule
- 包圍的會議開界,上下文(web請求)
- 帶有lazy =「extra」或帶有「set」(映射集合集合)的集合作爲「list」(映射列表集合)的實體(此問題主要由lazy = extra ..引起)
- 看起來額外cound計數語句來完成,但訪問整個集合拋出異常
調查通常的問題之後:
- 沒有會話打開
- 的對象不依賴於特定的會話
- 到
Session.Clear
或Session.Evict
有人呼籲(所以任何偷懶的驅逐實例將工作) -
我發現爲什麼這會發生沒有明確的原因,Spring.NET WebSupportModule未註冊.. A怪行爲是如果我在
NHprof
配置文件中,我看到在新的會話中的異常,換句話說,上下文會話正常工作, 但是,當引發異常時,該異常在輔助會話中可視化..但NO代碼打開會話,並且單個上下文會話 已打開。
任何人都知道還有什麼其他原因可能導致這樣的情況? 在此先感謝
如果您發佈了一些代碼示例,說明如何設置,這將有所幫助。 –
正如我在問題中所說的,代碼示例並不重要,重要的是對上下文的描述。上下文/配置的每個部分都作爲每個產品文檔的最佳實踐制定 – Hoghweed
我不是100%確定你的問題是什麼,但是可能需要知道'lazy =「extra」'和'.count()'需要一個開放的會話,因爲它執行「select count(*)'而不是'select *'和內存計數。 – Rippo