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

Nhibernate 如何使用ActiveRecord在桌面应用程序中为不同的窗口创建不同的会话?,nhibernate,activerecord,castle-activerecord,castle,Nhibernate,Activerecord,Castle Activerecord,Castle,我正在用Castle ActiveRecord构建一个桌面应用程序,并希望能够为每个窗口窗体执行相当于1个nHibernate会话的操作。关于如何使用Active Record执行此操作,有什么想法吗 具体来说,我有一个主窗口,允许您浏览数据(只读),然后您可以打开单独的表单来编辑数据 每次打开表单时,我都想创建一个新会话,获取一份要编辑的数据副本(这样就可以在不影响主窗口中数据的情况下对其进行更改)。然后,我希望能够通过数据绑定操作该副本。最后,提交更改(如果用户选择保存)或回滚更改(如果用户

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

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

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


有什么想法吗

如果不需要延迟加载,请不要使用SessionScope。您可以简单地进行数据绑定,并在保存时调用entity.Save()。因为您的对象是在没有会话范围的情况下分离的,所以您不必取消表单

如果您需要延迟加载,那么这在普通ActiveRecord中还不起作用。一个允许使用CpBT的ConversationScope(在您的例子中,每个表单实例的会话)已经计划好了,但还不可用

一种可能性是尝试Rhino Commons,它为ActiveRecord提供了一个工作单元实现。这可以让你想要什么与目前的AR,但我没有使用它约2年

编辑: 现在可以从trunk获得基本的CpBT实现。与nant一起签出并构建。有关如何使用它,请参见此链接:
它还没有准备好生产,但我希望得到反馈。

谢谢您的回答。如果我不使用SessionScope,它实际上会创建一个单独的数据项实例进行编辑吗?我问这个问题的原因是因为我遇到的另一个问题是,如果它们都使用同一个实例(即使我没有保存()),INotifyPropertyChanged消息将进入主窗口,这是我不希望看到的。如果可能的话,使用离散副本听起来是最好的选择?谢谢!!我正要去参加这个星期的CodeMash会议,但我回来后一定会试试这个。快速问题-这是否允许延迟加载(例如,通过数据绑定-在新的ConversationalScope(对话)之外发生的调用)?是的,我甚至在测试中的一条评论中指出了这一点。我今天对它进行了增强,我想它的功能将在本周末完成。刚从trunk下载并构建,看看我是否能解决这个问题-有没有电子邮件地址可以联系你?或者你能给我发封电子邮件:gmail的haxrchick?谢谢