2010-01-10 66 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

相关问题