如何在应用程序服务器上的序列化时刻使 NHibernate 代理静音



如您所知,当我们使用懒惰模式在NHibernate中检索数据时,Proxy对象会创建真正的对象来保持连接跟踪,如果我们需要加载其余数据等,但是当您要序列化对象以通过Web Api发送它时(仅例如),您将收到一个错误,说您有一个代理对象并且无法序列化, 有很多方法可以使这个代理保持沉默

-NhibernateUtil 库 - 第三方库

- 编写代码以在序列化进度上查找代理对象并使代理属性关闭

我正在寻找最好的模式来做到这一点,有没有人也做到了并准备与我们分享?

将 NHibernate 实体(代理)对象转换为 DTO 对我来说看起来更好。请参考这个问题。

这样,您就可以按照自己的方式自由使用 DTO。使用 NHibernate 实体对象时存在多个问题,就像无处不在一样。

  • 数据暴露在我想要隐藏(或仅在需要时公开)的 UI 中,例如密码、用户类型、权限等。
  • 在引用/连接上,NHibernate在访问属性时执行其他查询,从而使延迟加载的使用无效。
  • 向用户(实体)公开的不必要数据会造成混乱和错误差距。
  • 持久性实现泄漏到 BLL/UI 中。实体不是为 UI 设计的。它不能在所有情况下都提供 UI。
  • 我们使用 DTO 属性上的属性进行用户输入验证,这在实体中看起来很奇怪。

可以通过将实体转换为DTO来克服这些问题。

请注意,这种方法还有其他一些问题以及我提到的问题。

最新更新