在 BusinessLogic 中使用延迟加载的 NHibernate 会话

本文关键字:NHibernate 会话 延迟加载 BusinessLogic | 更新日期: 2023-09-27 18:33:21

我目前正在开发一个中型应用程序。应用程序将具有具有不同表示层的 n 层结构。一部分将是Web应用程序,但很可能还有其他部分处理例如传感器通信(现阶段

尚不清楚如何开发(。

我的问题是是否可以直接在业务逻辑层中使用 NHibernate,并在延迟加载时让业务逻辑向上层和水平层/部分提供请求的数据。

是否可以在业务层初始化会话,但仍有延迟加载?在这种情况下,如何处理会话?是否可以将请求的数据与会话包装在一起,以便只要对象处于活动状态,会话就处于活动状态?

有好的一天。

在 BusinessLogic 中使用延迟加载的 NHibernate 会话

不确定我是否完全理解您的问题,但从我收集的信息来看,您是在问当您的客户端不是 Web 客户端时是否可以使用延迟加载。
答案是肯定的;初始化Session的方式或位置无关紧要。

直接在业务层使用nHib被一些人(包括我自己(认为是最佳实践。

关于

您关于"将请求的数据与会话包装在一起,以便只要对象处于活动状态,会话就处于活动状态"的问题-
我不确定你的意思,但如果你的意思是将模型类与会话一起发送,以便你的客户端可以懒惰地加载它们的属性 - 我强烈建议不要去那里。
经验法则是,您给客户需要的东西,仅此而已。
(Ayende对此进行了详细说明。
出于这个原因,我认为您应该始终使用 DTO 与您的客户进行通信。

我设置的方式是:
客户端从服务器请求数据 =>服务器加载对象(但不初始化延迟加载的属性(,填充 DTO 并将其返回给客户端。

客户端请求延迟加载的属性 =>服务器加载对象(使用 nHib 的第二级缓存或其他缓存机制(,加载请求的属性并将 DTO 返回给客户端。