我知道有关这个主题的几个主题已经讨论过了,因为我一直在阅读很多内容来尝试解决我的问题,但不知怎的,他们碰巧没有满足我的需求(可能是因为缺乏细节)。无论如何,如果您认为某些特定的“主题”可能有用,请将其链接。
我正在使用WPF(和MVVM)开发桌面应用程序,我正在使用NHibernate。在研究了管理会话的可能方法之后,我决定使用每个窗体的会话方法。通过这种方式,我认为我可以充分利用NHibernate的功能,如延迟加载,缓存等。 当我正在使用数据库时,我不想在加载或保存我的实体时冻结我的UI,所以我认为我应该使用专用线程(在每种形式中,我认为简化了开发)到处理数据库交互。但问题是我应该如何“重用”该线程(假设我有一个与该线程相关的会话)来进行“数据库调用”。
编辑: 也许我遇到了这个问题,因为我把线程安全与其他东西混淆了。 当NHibernate文档说ISession实例不是线程安全的时候,这是否意味着如果两个线程同时尝试使用 ,我会(或可能)遇到麻烦,对吧?在我的情况下,如果我使用TPL,不同的线程可以使用相同的会话,但我不会同时在同一个会话中执行多个操作。那么,在那种情况下我会遇到麻烦吗?
答案 0 :(得分:0)
如果我可以提出建议,桌面应用程序很难直接与数据库交互。通信没有加密,对于那些拥有最少技术诀窍的人来说,获取数据库密码并开始使用SQL连接搞乱记录并破坏数据库非常容易。
最好在桌面应用程序和数据库之间创建一个具有身份验证的Web服务,因为您可以为每个人创建凭据,并且每个事务都将被强制遵守您的各种业务规则。
这也会解决您的线程问题,因为您可以在另一个线程上创建HTTP连接,而对会话管理几乎没有任何麻烦。可能需要一个cookie值,而RestSharp使这一点变得相当简单。