BusinessLogic中的NHibernate会话具有延迟加载

时间:2012-05-04 13:19:19

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

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

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

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

度过愉快的一天。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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