如您所知,当我们使用懒惰模式在NHibernate
中检索数据时,Proxy对象会创建真正的对象来保持连接跟踪,如果我们需要加载其余数据等,但是当您要序列化对象以通过Web Api
发送它时(仅例如),您将收到一个错误,说您有一个代理对象并且无法序列化, 有很多方法可以使这个代理保持沉默
-NhibernateUtil 库 - 第三方库
- 编写代码以在序列化进度上查找代理对象并使代理属性关闭
我正在寻找最好的模式来做到这一点,有没有人也做到了并准备与我们分享?
将 NHibernate 实体(代理)对象转换为 DTO 对我来说看起来更好。请参考这个问题。
这样,您就可以按照自己的方式自由使用 DTO。使用 NHibernate 实体对象时存在多个问题,就像无处不在一样。
- 数据暴露在我想要隐藏(或仅在需要时公开)的 UI 中,例如密码、用户类型、权限等。
- 在引用/连接上,NHibernate在访问属性时执行其他查询,从而使延迟加载的使用无效。
- 向用户(实体)公开的不必要数据会造成混乱和错误差距。
- 持久性实现泄漏到 BLL/UI 中。实体不是为 UI 设计的。它不能在所有情况下都提供 UI。
- 我们使用 DTO 属性上的属性进行用户输入验证,这在实体中看起来很奇怪。
可以通过将实体转换为DTO来克服这些问题。
请注意,这种方法还有其他一些问题以及我提到的问题。