我們有我們的第一個NHibernate項目進行得非常好。但是,我仍然沒有掌握如何在我們的場景中管理會話和對象的完整畫面。實體對象和NHibernate會話
所以,我們在一個持久對象模型中配置一個系統結構,存儲在一個數據庫中,使用NHibernate。
該系統由應用程序在服務進程中監視的物理設備組成。因此,在服務啓動時,我們實例化服務中的Device對象,並根據從設備接口讀取的數據更新其狀態。對象模型在服務的生命週期中保持活動狀態。
該服務還提供Silverlight客戶端,該客戶端顯示對象數據並可能操縱某些對象。但是它們必須訪問服務用於監視的相同對象,例如,因爲對象也具有內存數據,這些數據也不會被保留。 (是的,我們使用DTO對象實際上將數據傳輸到客戶端。)
由於該服務是一個多線程系統,所以問題是如何管理NHibernate會話。
我現在正在考慮一種方法,我們只需要一個後臺線程來處理後臺中的對象持久化,其他線程將「SaveRequests」放到我們的Repository中,而不是直接訪問NHibernate會話。通過這種方式,我可以爲服務使用單個會話並管理與訪問對象的服務和客戶端完全分離的NHibernate層。
我還沒有找到這樣的設置的任何文檔,因爲每個人都建議每會話請求模型或一些變化。但是,如果我正確地做到了,如果我在一個會話中實例化一個對象並將它保存在另一個會話中,它不是同一個對象 - 並且NHibernate似乎也會在數據庫中創建一個新條目。
我也試圖找出IOC容器在這種情況下的角色,但我還沒有找到任何有用的例子來證明他們真的可以幫助我。
我在正確的軌道上,還是應該如何繼續?
是的,我已經考慮過了。但是因爲我的對象「永遠」活着,我認爲UnitOfWork也應該永遠活着。或者,我如何將一個會話中的更改始終與服務會話中活動的對象關聯起來?主界面不是客戶端,而是跟蹤系統狀態的服務應用程序,同時我們在對象中也有實時數據(例如狀態和當前值)。 –
我想不出任何情況下,你會想'活着的對象'的時間超過〜1秒... – Phill
我們決定監視是基於追蹤系統當前狀態的對象,因爲是主要部分。它們的配置一直存在,但不是現在的狀態。 –