2010-06-09 132 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

相關問題