我有一段時間試圖找出我在NHibernate中的會話管理困境。我假設很多我的麻煩是由於缺乏對IoC和AOP概念的知識;至少這就是我在法比奧毛羅一直指導着我的思想。NHibernate會話管理和延遲加載
無論如何,我的問題是,我有一個勝利形式的應用程序,正在進行「獲取」調用並將結果綁定到網格。在綁定之後,用戶可以執行某種「寫入」操作,並且這些操作會導致會話在寫入後關閉,試圖使用會話每次使用概念。然後用戶可以滾動網格,導致延遲加載啓動,現在會話已關閉,我得到一個異常。
我不想讓我的觀點認識我的會話,我不想在用戶關閉表單時發送KillAllSessions。另外,用戶可能會在任何給定時間打開多個表單,從而進一步加劇與該方法相關的問題。我基本上希望所有這些在「幕後」工作。
所以我的想法到目前爲止是攔截延遲加載調用,並檢查會話是否打開,如果不重新打開它,獲取信息,然後重新關閉它。但是,據我所知,這並不多,這實際上是延遲加載的工作原理。它被代理工廠攔截(NHibernate.Bytecode.Castle),然後使用會話檢索數據。因此,我需要實際攔截該呼叫,然後在重新開放會話後將其傳遞給原來的預期攔截。所以這是我的想法。
我的問題基本上首先是這是甚至正確的方式去做這件事?第二,如果是這樣,我甚至不知道從哪裏開始。我從來沒有做過方法調用的攔截,我從理論上知道它,但在實踐中並不知情。我知道有些圖書館可以做這種事情,比如Rhino Commons,但我想借此機會學習併成爲一名更好的程序員。我正試圖理解AOP和上下文綁定對象,但目前我並不在意它。可能你們中的一些人請幫助一個人嗎?
聽起來像是一件很奇怪的事情。會議結束後應處理。你能給個例子嗎? – Paco 2009-06-23 19:42:27
對不起,哪一部分看起來很奇怪?就一個例子而言,除了給你提供一系列讓我面臨這個問題的事件之外,我什麼都不知道: 1.打開會話 2.以IList的形式獲取數據 3.填寫ITyped自定義集合 4.綁定到數據網格 5.任意更改 6.此更改請求會話 7.會話管理器將其交給已打開的會話 8.由於它是寫入函數,因此它在完成時關閉會話 9.用戶開始滾動網格,導致延遲加載發生 10.由於會話不再打開引發異常 – joshlrogers 2009-06-23 19:54:59
爲什麼在滾動期間發生延遲加載? – Paco 2009-06-23 21:11:38