gpt4 book ai didi

c# - 使用 NHibernate 重用线程的 session

转载 作者:行者123 更新时间:2023-12-03 10:48:55 30 4
gpt4 key购买 nike

我知道已经讨论了有关该主题的几个主题,因为我一直在阅读很多内容以尝试解决我的问题,但不知何故它们碰巧不能满足我的需求(可能是因为缺乏细节)。无论如何,如果您认为某些特定的“主题”可能有用,请链接它。

我正在使用 WPF(和 MVVM)开发桌面应用程序,并且正在使用 NHibernate。在研究了管理 session 的可能方法后,我决定使用每表单 session 的方法。通过这种方式,我想我可以充分利用 NHibernate 的延迟加载、缓存等特性。
当我使用数据库时,我不想在加载或保存我的实体时卡住我的 UI,所以我认为我应该使用一个专用线程(在每种形式中,我认为这可以简化开发)处理数据库交互。但是,问题是我应该如何“重用”线程(假设我有一个与该线程关联的 session )来进行“数据库调用”。

  • 我想我不能使用 TPL,因为我不能保证这两个任务会在同一个线程中运行(甚至不能保证它们会在与调用者不同的线程中运行)
  • 我更喜欢使用 session-per-form,因为我已经看到类似的讨论以使用 session-per-conversation 或类似的方式结束。但是无论如何,如果您发现 session 每次 session 会更好,请告诉我(并希望解释原因)
  • 线程不提供直接运行多个方法的方法,所以我认为我必须“监听”请求,但我仍然不确定我是否真的必须这样做以及如何“使用” session (并保存)仅在线程内。

  • 编辑:
    也许我遇到了这个问题,因为我将线程安全与其他东西混淆了。
    当 NHibernate 文档说 ISession 实例不是线程安全的时,是否意味着如果两个线程尝试使用它我会(或可能)遇到麻烦 同时 , 对?就我而言,如果我使用 TPL,不同的线程可以使用同一个 session ,但我不会同时在同一个 session 中执行多个操作。那么,在那种情况下我会遇到麻烦吗?

    最佳答案

    如果我可以提出建议,桌面应用程序不太适合直接与数据库交互。通信没有加密,即使是最有知识的人也很容易获取数据库密码并开始使用 SQL 连接弄乱记录并破坏您的数据库。

    最好在桌面应用程序和数据库之间创建一个具有身份验证的 Web 服务,因为您可以为每个人创建凭据,并且每笔交易都将强制遵守您的各种业务规则。

    这也可以解决您的线程问题,因为您可以在另一个线程上创建 HTTP 连接,而 session 管理几乎没有问题。一个 cookie 值可能就是所有需要的,而 RestSharp 使这变得相当简单。

    关于c# - 使用 NHibernate 重用线程的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895687/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com