我正在开发一个多用户 winforms 应用程序 (MDI)。我们的应用程序使用 NHibernate 和每个实例一个会话。
问题是如果用户进行修改,例如用户将项目添加到列表中,另一个用户不会立即看到此修改。我该如何解决这个问题,推荐的方法是什么?我应该使用 One-session-per-form 还是其他方式?
我正在开发一个多用户 winforms 应用程序 (MDI)。我们的应用程序使用 NHibernate 和每个实例一个会话。
问题是如果用户进行修改,例如用户将项目添加到列表中,另一个用户不会立即看到此修改。我该如何解决这个问题,推荐的方法是什么?我应该使用 One-session-per-form 还是其他方式?
每个应用程序都需要定义自己的工作单元。对于您的用例,如果您希望每次用户将项目添加到列表时更新数据库,那么这应该是您的工作单元。
因此,要针对您的独特用例回答您的问题,我将创建一个新的 NHibernate 会话,保留用户更改,并在每次用户将项目添加到列表时处理该会话。
仅供参考:如果这确实是您的应用程序想要的行为,您不应该觉得为每个用户操作创建一个会话有什么问题。通常在 WinForms 应用程序中,大多数人确实使用 Session-per-Form 模式,但话又说回来,这是因为大多数 WinForms 应用程序都属于用户需要在进入下一个表单之前完成的表单模型。在这些情况下,您只想在用户提交表单时保留/保存用户的更改。但是,如果您的应用程序不属于该模型,那么您对工作单元(会话生命周期)的定义可能会完全不同。