我知道已经讨论了有关该主题的几个主题,因为我一直在阅读很多内容以尝试解决我的问题,但不知何故它们碰巧不能满足我的需求(可能是因为缺乏细节)。无论如何,如果您认为某些特定的“主题”可能有用,请链接它。
我正在使用 WPF(和 MVVM)开发桌面应用程序,并且正在使用 NHibernate。在研究了管理会话的可能方法后,我决定使用每表单会话的方法。通过这种方式,我想我可以充分利用 NHibernate 的延迟加载、缓存等特性。当我使用数据库时,我不想在加载或保存我的实体时冻结我的 UI,所以我认为我应该使用专用线程(在每种形式中,我认为这可以简化开发)处理数据库交互。但是,问题是我应该如何“重用”线程(假设我有一个与该线程关联的会话)来进行“数据库调用”。
- 我想我不能使用 TPL,因为我不能保证这两个任务会在同一个线程中运行(甚至不能保证它们会在与调用者不同的线程中运行)
- 我更喜欢使用 session-per-form,因为我已经看到类似的讨论以使用 session-per-conversation 或类似的方式结束。但是无论如何,如果您发现每次会话会话会更好,请告诉我(并希望解释原因)
- 线程不提供直接运行多个方法的方法,所以我认为我必须“监听”请求,但我仍然不确定我是否真的必须这样做以及如何“使用”会话(并保存)仅在线程内。
编辑:也许我遇到了这个问题,因为我将线程安全与其他东西混淆了。当 NHibernate 文档说 ISession 实例不是线程安全的时,这是否意味着如果两个线程同时尝试使用它,我会(或可能)遇到麻烦,对吗?就我而言,如果我使用 TPL,不同的线程可以使用同一个会话,但我不会同时在同一个会话中执行多个操作。那么,在那种情况下我会遇到麻烦吗?