如何使用ActiveRecord在桌面应用程序中为不同的窗口创建不同的会话?

时间:2010-01-10 20:59:44

标签: nhibernate activerecord castle-activerecord castle

我正在使用Castle ActiveRecord构建桌面应用程序,并且希望能够为每个窗口形式执行相当于1 nHibernate会话的操作。关于如何使用Active Record执行此操作的任何想法?

具体来说,我有一个主窗口,允许您浏览数据(只读),然后您可以打开单独的表单来编辑数据。

每次打开表单时,我都想创建一个新会话,获取要编辑的数据的副本(因此可以在不影响主窗口中的数据的情况下进行更改)。然后,我希望能够通过数据绑定操作该副本。最后,提交更改(如果用户选择保存)或回滚(如果用户选择取消)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您不需要延迟加载,请不要使用SessionScope。您可以简单地数据绑定并在Save上调用entity.Save()。由于您的对象在没有SessionScope的情况下被分离,因此您无需对取消表单执行任何操作。

如果你需要延迟加载,那么这对普通的ActiveRecord不起作用。允许使用CpBT的ConversationalScope(在您的情况下是每个表单实例的对话),但尚未提供。

一种可能性是尝试Rhino Commons,它具有ActiveRecord的工作单元实现。这可以允许你想要的当前AR,但我没有使用它约2年。

编辑: 现在可以从trunk获得基本的CpBT实现。退房并与nant一起建造。请参阅此链接以了解如何使用它: https://svn.castleproject.org/svn/castle/ActiveRecord/trunk/src/Castle.ActiveRecord.Tests/Conversation/ConversationScenarioTest.cs 它尚未准备好生产,但我喜欢它的反馈。