NHibernate在断开连接的场景中

时间:2009-06-08 19:52:05

标签: nhibernate session

您对最新版本的NHibernate(2.0.1 GA)有关断开连接方案的体验有哪些?

断开连接的场景是我从NHibernate获取一些对象图,断开与会话(和数据库连接)的连接,在对象图中做一些更改(在集合中删除,添加实体,更新实体),然后重新连接并保存。 ...

2 个答案:

答案 0 :(得分:4)

我们在客户端 - 服务器架构中尝试过这种方法。现在我们转向DTO(数据传输对象)。这意味着,分离的实体不再直接发送给客户端,而是专门的对象。

向这个方向发展的主要原因不是NHibernate,它实际上是将实体发送到客户端所需的序列化。虽然您可以在连接到会话时使用延迟加载(并且您将会!),但您需要从数据库获取所有引用以对其进行序列化。

我们有很多Guids而不是引用和许多映射但未序列化的属性......它变得很痛苦。因此,将您真正想要序列化的内容复制到自己的结构中要容易得多。

除此之外 - 分离工作可以很好地运作。

  • 请注意延迟加载,这将导致在分离的实例上访问未加载的对象时抛出异常。
  • 注意并发性,实体在分离时发生变化的可能性很高。
  • 如果您需要某种安全性,或者您希望您的服务器能够进行一些数据更改,请务必小心。分离的对象可能在任何状态下返回。

答案 1 :(得分:4)

您可以查看会话方法 SaveOrUpdateCopy 合并

这是一篇文章,为您提供更多详细信息: NHibernate feature: SaveOrUpdateCopy & Merge