2010-06-09 133 views
0

我一直在撞砖墙近两天,因此任何帮助都会很棒。Nhibernate - 在断开连接的会话中引用瞬态对象

我得到的情景基本上是这样的。

我有一个叫做Campaign的对象,我在web客户端从头开始创建。 Campaign提及另一个对象PortalPortal已通过NHibernate从数据库中提取。

当我来打电话给CreateCampaign(Campaign cmp) NH酒吧说,对Portal的引用是暂时的,必须先保存。如果我从头开始创建所有东西,那么它工作正常。

因此总之,我有一个新的Campaign实例引用了一个分离的实例Portal。级联设置为“save-update,merge”。

在我可以调用session.Save之前,是否需要将所有分离的实例重新加载到会话中,还是我不知道的其他内容。

对不起,如果这看起来有点模糊,缺乏任何代码,..NDA阻止我发布和代码。

在此先感谢。

回答

1

您可以使用ISession.Lock你瞬态对象附加到正在使用坚持同一个会话活动:

session.Lock(myPortal, LockMode.None); 
myCampaign.Portal = myPortal; 
session.Save(myCampaign); 
+0

并不意味着我得虽然重建活动?我有很多分离的实例在模型下面,所以这样做会使大多数操作非常复杂。我希望我能通过新的运动,让NH做剩下的事情,或者我问得太多了? – Stimul8d 2010-06-09 13:45:53

+0

这种交流让我得出结论,Lock的行为取决于您的级联设置:https://forum.hibernate.org/viewtopic.php?f=25&t=961144&view=next。我不知道在持久对象(Campaign)上调用Lock是否会级联到子对象,或者您是否必须自己做。 – 2010-06-09 14:39:42

+0

我实际上最终更改了级联设置并使用session.refresh和session.merge。尽管如此,你仍然在正确的轨道上。 – Stimul8d 2010-06-15 16:21:40

相关问题