2010-01-10 48 views
0

我正在用Castle ActiveRecord構建一個桌面應用程序,並希望能夠完成每個窗口窗體1個nHibernate會話的等效功能。關於如何使用Active Record執行此操作的任何想法?如何使用ActiveRecord爲桌面應用程序中的不同窗口創建不同的會話?

具體來說,我有一個主窗口,允許您瀏覽數據(只讀),然後您可以打開單獨的窗體來編輯數據。

每次打開表格時,我想要創建一個新的會話,獲取要編輯的數據的副本(因此可以更改而不會影響主窗口中的數據)。然後我希望能夠通過數據綁定操作該副本。最後,提交更改(如果用戶選擇保存)或將其回滾(如果用戶選擇取消)。

任何想法?

回答

1

如果您不需要延遲加載,請不要使用SessionScope。您可以簡單地在保存上進行數據綁定並調用entity.Save()。由於您的對象在沒有SessionScope的情況下被分離,所以您不必在取消表單時進行任何操作。

如果您需要延遲加載,那麼這對普通的ActiveRecord還是不起作用。 ConversationalScope允許使用CpBT(在您的情況下,每個表單實例對話)已計劃,但尚未提供。

一種可能性是嘗試犀牛Commons,它具有ActiveRecord的工作單元實現。這可以允許你使用目前的AR,但是我沒有使用它約2年。

編輯: 基本的CpBT實現現在可以從trunk中獲得。退房並用nant構建。看到這個鏈接如何使用它: https://svn.castleproject.org/svn/castle/ActiveRecord/trunk/src/Castle.ActiveRecord.Tests/Conversation/ConversationScenarioTest.cs 它尚未生產準備,但我很樂意反饋。

+0

感謝您的回答。如果我不使用SessionScope,它實際上是否會創建要編輯的數據項的單獨實例?我問的原因是因爲我遇到的另一個問題是如果他們都使用相同的實例(即使我不保存())INotifyPropertyChanged消息將去主窗口 - 我不想。因此,如果可能的話,使用獨立副本聽起來最好嗎? – 2010-01-10 22:19:02

+0

謝謝!我即將前往本週的CodeMash會議,但當我回來時,我會毫不猶豫地嘗試。快速問題 - 這將允許延遲加載(例如,通過數據綁定 - 所以在新的ConversationalScope(會話)之外發生的調用)? – 2010-01-12 14:31:30

+0

是的,我甚至在那個測試的評論中指出了這一點。我今天強化了它,我認爲它將在本週末完成。 – MZywitza 2010-01-12 19:48:27

相關問題