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