【问题标题】:NHibernate session in BusinessLogic with lazy loading具有延迟加载的 BusinessLogic 中的 NHibernate 会话
【发布时间】:2012-05-14 01:05:41
【问题描述】:

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

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

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

祝你有美好的一天。

【问题讨论】:

    标签: c# nhibernate session n-tier-architecture business-logic


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多