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

时间:2017-03-22 01:34:45

标签: c# sql serialization asp.net-web-api nhibernate

如您所知,当我们使用延迟模式检索NHibernate中的数据时,如果我们需要加载其余数据,则代理对象会创建真实对象以保持连接跟踪等,但是当你想要序列化对象以通过Web Api发送它时(例如)你会得到一个错误,说明你有一个代理对象并且无法序列化,有很多方法使这个代理人沉默

- NhibernateUtil库
  - 3rdParty Library
  - 编写代码以在序列化进度中查找代理对象并关闭代理属性

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

1 个答案:

答案 0 :(得分:3)

将NHibernate实体(代理)对象转换为DTO对我来说是更好的方法。请参阅此question

这样做,您可以按照自己的方式自由使用DTO。使用NHibernate Entity对象时遇到的问题无处不在。

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

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

请注意,此方法还存在其他一些问题,以及我提到过的问题。